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

时间:2017-06-23 09:13:20

标签: android dependency-injection kotlin dagger-2 kotlin-lateinit

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

@field:[Inject ApplicationContext]
lateinit var context: Context

但是,Kotlin中的基本类型属性不允许使用lateinit修饰符(例如Boolean),我该怎样做?

@field:[Inject Named("isDemo")]
lateinit var isDemo: Boolean

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

2 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:3)

可接受的答案不适用于我,但以下方法效果很好:

yield

Source