Dagger2 позволяет инъекции быть нулевым
Короче говоря, у меня много вкусов одного и того же приложения с небольшими отличиями. Я хотел бы добавить Навигатор для всех вкусов независимо. Я использую Dagger2, и у меня есть подкомпонент для каждого аромата, где я добавляю вещи только для данного аромата. Поэтому я бы тоже хотел добавить класс Navigator.
Хитрость в том, что некоторые классы в общем коде тоже используют этот навигатор с нулевой проверкой. Так что, если это ноль, хорошо, но если нет, тогда делайте x.
Так что я хотел бы иметь поле как:
@Inject @Nullable Navigator navigator;
Dagger выдает мне ошибку, если нет метода @Provides для чего-то подобного, но это именно то, что я хочу, я хочу, чтобы @Provides входил в подмодули, но все еще вставлял в общую базу кода.
Как мне этого добиться?
2 ответа
Чтобы поддерживать обнуляемый тип, вам просто нужно добавить @Nullable
аннотации на вашем @Provides
метод, который возвращает обнуляемый тип, и Dagger примет его.
Если вы этого не сделаете, Dagger будет жаловаться, что вы можете предоставлять только обнуляемые типы из @Nullable
аннотированные методы.
если вы не хотите идти по пути внедрения объектов, допускающих значение NULL, вы можете вернуть
Optional<Navigator>
в вашем модуле кинжала - в конечном итоге вы получите более чистый код.