如何在 Kotlin 中注入原始变量?
How to inject primitive variables in Kotlin?
我在我的 Android 应用程序中使用 Dagger2 作为 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
已接受的答案对我不起作用,但以下答案很有效:
@set:[Inject Named("isDemo")]
var isDemo: Boolean = false
我在我的 Android 应用程序中使用 Dagger2 作为 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
已接受的答案对我不起作用,但以下答案很有效:
@set:[Inject Named("isDemo")]
var isDemo: Boolean = false