我在Android应用程序中使用Dagger2 for DI,并使用以下代码将类注入到Activity中很好:
@field:[Inject ApplicationContext]
lateinit var context: Context
但是,lateinit
Kotlin中的原始类型属性(例如Boolean
)上不允许使用修饰符,我该怎么做?
@field:[Inject Named("isDemo")]
lateinit var isDemo: Boolean
当我lateinit
从这段代码中删除时,我得到这个错误Dagger does not support injection into private fields
首先,您不需要lateinit
,可以将其保留为var
,并使用任意值进行初始化。其次,您必须公开一个字段,以允许Dagger注入该字段。所以,这是解决方案:
@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value
protected
如果您想保护仅在(子)类中访问(和更改)的属性,也许您应该想到一个正确的方法-与Dagger一起使用,因为这不会导致private
这可行。谢谢。这有点混乱。希望匕首/科特林解决这个问题。