Dagger2 позволяет инъекции быть нулевым

Короче говоря, у меня много вкусов одного и того же приложения с небольшими отличиями. Я хотел бы добавить Навигатор для всех вкусов независимо. Я использую Dagger2, и у меня есть подкомпонент для каждого аромата, где я добавляю вещи только для данного аромата. Поэтому я бы тоже хотел добавить класс Navigator.

Хитрость в том, что некоторые классы в общем коде тоже используют этот навигатор с нулевой проверкой. Так что, если это ноль, хорошо, но если нет, тогда делайте x.

Так что я хотел бы иметь поле как:

@Inject @Nullable Navigator navigator;

Dagger выдает мне ошибку, если нет метода @Provides для чего-то подобного, но это именно то, что я хочу, я хочу, чтобы @Provides входил в подмодули, но все еще вставлял в общую базу кода.

Как мне этого добиться?

2 ответа

Чтобы поддерживать обнуляемый тип, вам просто нужно добавить @Nullable аннотации на вашем @Provides метод, который возвращает обнуляемый тип, и Dagger примет его.

Если вы этого не сделаете, Dagger будет жаловаться, что вы можете предоставлять только обнуляемые типы из @Nullable аннотированные методы.

если вы не хотите идти по пути внедрения объектов, допускающих значение NULL, вы можете вернуть Optional<Navigator> в вашем модуле кинжала - в конечном итоге вы получите более чистый код.

Другие вопросы по тегам