19

我在我的 Android 应用程序中将 Dagger2 用于 DI,并且使用此代码将类注入到我的 Activity 中很好:

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

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

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

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

4

2 回答 2

39

首先,您不需要lateinit,您可以将其保留为var,并使用任意值进行初始化。其次,您必须公开一个字段以允许 Dagger 在那里注入。所以,这是解决方案:

@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value
于 2017-06-23T12:22:16.473 回答
5

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

@set:[Inject Named("isDemo")]
var isDemo: Boolean = false

资源

于 2020-09-24T14:58:54.180 回答