如何在Kotlin中注入原始变量?

Moh*_*ini 10 android dependency-injection kotlin dagger-2 kotlin-lateinit

我在我的Android应用程序中使用Dagger2 for DI,并使用此代码将类注入我的Activity中:

@field:[Inject ApplicationContext]
lateinit var context: Context
Run Code Online (Sandbox Code Playgroud)

但是,lateinitKotlin中的原始类型属性不允许使用修饰符(例如Boolean),我该怎么做呢?

@field:[Inject Named("isDemo")]
lateinit var isDemo: Boolean
Run Code Online (Sandbox Code Playgroud)

当我lateinit从这段代码中删除时,我收到此错误Dagger does not support injection into private fields

Mih*_*x64 25

首先,您不需要lateinit,可以将其保留为a var,并使用任意值进行初始化.其次,你必须暴露一个字段才能让Dagger注入其中.所以,这是解决方案:

@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value
Run Code Online (Sandbox Code Playgroud)


Moh*_*hat 5

接受的答案对我不起作用,但以下效果很好:

@set:[Inject Named("isDemo")]
var isDemo: Boolean = false
Run Code Online (Sandbox Code Playgroud)

来源