Подтвердить что ты не робот

Использование Котлина с кинжалом

Какой лучший способ использовать Кинжал для инъекции зависимостей в классы, особенно классы конструкторов с нулевым аргументом, такие как Activities, с кинжалом? Может ли Кинжал 2 улучшить ситуацию?

Спасибо заранее.

4b9b3361

Ответ 1

С выпуском Kotlin M13 новое свойство было добавлено специально для поддержки инъекции зависимостей (например, с кинжалом 1 и 2) и другими фреймворками.

Он назвал свойство lateinit. Из документации:

 class Example {
            @Inject
            lateinit var bar: Bar 
 }

В двух словах bar не имеет инициализаторов, но объявляется как непустой тип. Если вы попытаетесь прочитать его перед инициализацией, будет создано исключение.
В противном случае, как только он инициализируется с помощью кинжала, его можно использовать как нормальное свойство.

Все хорошо объяснено в языке doc, и вы также можете проверить сообщение в блоге в релиз M13.

Ответ 2

Я не обновлял свой ответ какое-то время, и он устарел. Также заметил здесь новый ответ от @Ben, который работает для M13/M14.

Решил, что лучше всего, если я перенаправляю всех вас к проекту шаблона, который я стараюсь обновлять с последними версиями Kotlin и Dagger 2. Образец Kotlin + Кинжал 2

Я описываю, как вводить объекты, включая несколько аннотаций и т.д.

Ответ 3

Кинжал полагается на обработку аннотаций, которая пока не поддерживается в Котлине, насколько я знаю. Но они говорят, что это запланировано. И хотя вы можете либо расширить классы java с помощью зависимостей Dagger, либо попробовать некоторые рамки на основе рефлексии - Guice, Roboguice