Внедрить поле члена Kotlin без компонента в Dagger - PullRequest
1 голос
/ 22 мая 2019

В Kotlin вы можете ввести элемент поля следующим образом:

@Inject lateinit var coffee: Coffee

Но после игры с Dagger я заметил, что, пока это работает, кофе всегда будет нулевым, если не используются модуль и компонента затем компоновщик компонентов используется для создания зависимости Coffee.Это правда?Разве нельзя просто иметь модуль, не имея также компонента?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Запрос на инъекцию, основанный на модуле без компонента, немного похож на вопрос, можете ли вы поужинать, если у вас есть рецепт, но нет кухни.Модуль - это просто рецепт (конфигурация);Компонент делает все приготовления (создание).В этой аналогии сами реализации будут компонентами, которые Dagger готовит для вас по запросу.

Большая часть функциональности Dagger основана на реализации , которую Dagger создает на основе интерфейса вы аннотируете @Component.Остальная часть кода Dagger обрабатывает ваши @Module классы и ваши классы, которые используют @Inject, так что Dagger может вызывать методы и конструкторы и устанавливать поля, но без @Component ничто не вызовет эти вспомогательные классы.Таким образом, во всех случаях @Component действительно необходим.

Тем не менее, пока у вас есть Компонент, у вас есть выбор разрешить ли Dagger создать свой класс - получитьэкземпляр из Dagger - или создать свой класс вручную и позволить Dagger заполнить его @Inject членов позже.

1 голос
/ 22 мая 2019

@Inject аннотации и модули используются, чтобы Dagger знал, как создавать зависимости. Затем Dagger нужно что-то, что может реально создавать вещи с этими зависимостями. Это где компоненты входят, и именно поэтому вы объявляете методы интерфейса, которые возвращают типы, в которые вы хотите внедрить вещи в них.

Dagger будет использовать методы компонентов для генерации внедренных зависимостей. Люди обычно говорят, что компоненты действуют как «связующее звено» между зависимостями, поскольку компоненты устанавливают корни графов объектов с помощью своих методов.

Итак, отвечая на ваш вопрос: да, вам нужен хотя бы один компонент.

...