Какой лучший способ использовать Кинжал для инъекции зависимостей в классы, особенно классы конструкторов с нулевым аргументом, такие как Activities, с кинжалом? Может ли Кинжал 2 улучшить ситуацию?
Спасибо заранее.
Ответ 1
С выпуском Kotlin M13 новое свойство было добавлено специально для поддержки инъекции зависимостей (например, с кинжалом 1 и 2) и другими фреймворками.
Он назвал свойство lateinit. Из документации:
class Example {
@Inject
lateinit var bar: Bar
}
В двух словах bar не имеет инициализаторов, но объявляется как непустой тип. Если вы попытаетесь прочитать его перед инициализацией, будет создано исключение.
В противном случае, как только он инициализируется с помощью кинжала, его можно использовать как нормальное свойство.
Я не обновлял свой ответ какое-то время, и он устарел. Также заметил здесь новый ответ от @Ben, который работает для M13/M14.
Решил, что лучше всего, если я перенаправляю всех вас к проекту шаблона, который я стараюсь обновлять с последними версиями Kotlin и Dagger 2. Образец Kotlin + Кинжал 2
Я описываю, как вводить объекты, включая несколько аннотаций и т.д.
Ответ 3
Кинжал полагается на обработку аннотаций, которая пока не поддерживается в Котлине, насколько я знаю. Но они говорят, что это запланировано. И хотя вы можете либо расширить классы java с помощью зависимостей Dagger, либо попробовать некоторые рамки на основе рефлексии - Guice, Roboguice