如何在 Kotlin 中注入原始变量?
Posted
技术标签:
【中文标题】如何在 Kotlin 中注入原始变量?【英文标题】:How to inject primitive variables in Kotlin? 【发布时间】:2017-11-26 19:19:54 【问题描述】:我在我的 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
【问题讨论】:
@JvmField @field:[Inject Named("isDemo")] var isDemo: Boolean = false
@Miha_x64 以及 Inject 和 Named 注释在哪里?!
@Miha_x64 谢谢,它有效!
@Miha_x64 请添加您的答案。给 cmets 点赞太无聊了。
【参考方案1】:
首先,您不需要lateinit
,您可以将其保留为var
,并使用任意值进行初始化。
其次,您必须公开一个字段以允许 Dagger 在那里注入。
所以,这是解决方案:
@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value
【讨论】:
如果您想保护仅在(子)类中访问(和更改)的属性,也许您应该考虑protected
true - 与 Dagger 一起使用,因为这不会导致private
这行得通。谢谢。这有点乱。希望 dagger/kotlin 解决这个问题。【参考方案2】:
接受的答案对我不起作用,但以下方法效果很好:
@set:[Inject Named("isDemo")]
var isDemo: Boolean = false
Source
【讨论】:
对我来说,只接受接受的答案,而不是你的。在您的情况下,我收到错误“Dagger 不支持注入私有字段”以上是关于如何在 Kotlin 中注入原始变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android/Kotlin App 上通过 Koin 注入在 BaseActivity 中初始化/注入通用 ViewModel
如何在用 Kotlin 编写的 JUnit 5 测试类中注入 Spring bean?
如何使用 SpringBoot2、JUnit5 和 Kotlin 将配置属性注入单元测试