Использование Kotlin с Dagger
Как лучше всего использовать Dagger для внедрения зависимостей в классы, особенно классы конструктора с нулевым аргументом, такие как Activity, с помощью Dagger? Сможет ли Dagger 2 улучшить ситуацию?
Заранее спасибо.
4 ответа
После выпуска Kotlin M13 было специально добавлено новое свойство для поддержки внедрения зависимостей (как в Dagger 1 и 2) и других сред.
Это называется латинитная собственность. Взято из документации:
class Example {
@Inject
lateinit var bar: Bar
}
В двух словах, bar не имеет инициализаторов, но объявлен как ненулевой тип. Если вы попытаетесь прочитать его перед инициализацией, выдается исключение.
В противном случае, после инициализации с помощью Dagger его можно использовать как обычное свойство.
Все хорошо объяснено в языковом документе, и вы также можете проверить запись в блоге относительно выпуска M13 там.
Некоторое время я не обновлял свой ответ, и он устарел. Также заметил здесь новый ответ от @Ben, который работает для M13/M14.
Решил, что будет лучше, если я перенаправлю всех вас, заинтересованных в мой шаблонный проект, который я стараюсь держать в курсе последних версий Kotlin и Dagger 2. Котлин + Кинжал 2 образца
Я описываю там, как вводить объекты, в том числе несколько аннотаций и т. Д.
Dagger полагается на обработку аннотаций, которая, насколько я знаю, пока не поддерживается в Kotlin. Но они говорят, что это запланировано. И в то же время, вы можете либо расширить классы Java с помощью Dagger-зависимостей, либо попробовать какую-то основанную на отражении инфраструктуру внедрения - Guice, Roboguice
для использования аннотаций кинжала в Kotlin1- // кинжал добавить зависимости на уровне приложения
implementation 'com.google.dagger:dagger:2.38.1'
kapt 'com.google.dagger:dagger-compiler:2.38.1'
добавить в уровень приложения / градиент
plugins {
id 'kotlin-kapt'
}
теперь вы можете использовать аннотации вроде
@Inject @Component
так далее
class Test{
@Inject
lateinit var name: String
}