24

使用 Dagger 将依赖项注入类的最佳方法是什么,尤其是像活动这样的零参数构造函数类,使用 Dagger?Dagger 2 可能会改善这种情况吗?

提前致谢。

4

4 回答 4

33

Kotlin M13发布以来,特别添加了一个新属性以支持依赖注入(如 Dagger 1&2)和其他框架。

它被称为lateinit属性。取自文档:

 class Example {
            @Inject
            lateinit var bar: Bar 
 }

简而言之,bar没有初始化器,但被声明为非空类型。如果您在初始化之前尝试读取它,则会引发异常。
否则,一旦使用 Dagger 初始化它,它就可以用作普通属性。

语言文档中对所有内容都进行了很好的解释,您还可以在那里查看与 M13 版本相关的博客文章。

于 2015-09-16T17:34:26.910 回答
13

我有一段时间没有更新我的答案,它已经过时了。这里还注意到@Ben 的新答案适用于 M13/M14。

决定最好将所有感兴趣的人重定向到我的模板项目,我会尝试与最新的 Kotlin 和 Dagger 2 版本保持同步。Kotlin + Dagger 2 示例

我在那里描述如何注入对象,包括多个注释等。

于 2014-12-11T16:56:03.283 回答
1

Dagger 依赖于注释处理,据我所知,Kotlin 尚不支持。但他们说,这是计划好的。同时,您可以使用 Dagger 依赖项扩展 java 类,或者尝试一些基于反射的注入框架 - Guice、Roboguice

于 2014-10-19T04:11:29.747 回答
0

在 Kotlin 中使用 dagger 注释 1- // dagger 在应用程序级别添加依赖项

implementation 'com.google.dagger:dagger:2.38.1'
kapt 'com.google.dagger:dagger-compiler:2.38.1'

添加应用级别/gradle

plugins {
    id 'kotlin-kapt'
}

@Inject @Component现在您可以使用诸如etc之类的注释

class Test{
    @Inject
    lateinit var name: String
}
于 2021-09-01T06:27:46.797 回答