android - 如何在 Kotlin 中注入(inject)原始变量?

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

我在我的 Android 应用程序中使用 Dagger2 进行 DI,使用此代码将类注入(inject)到我的 Activity 中很好:

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

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

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

当我从此代码中删除 lateinit 时,我收到此错误 Dagger 不支持注入(inject)私有(private)字段

最佳答案

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

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

关于android - 如何在 Kotlin 中注入(inject)原始变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717566/

相关文章:

java - 计算两个日期之间的天数

android - 如何以编程方式将 View 添加到 View

java - Kotlin 数据类扩展了 Java 类

更改 fragment 后隐藏的Android FAB HideBottomViewOnScrollBehavior statys

android - 如何在开始新动画之前检查动画是否正在运行?

java - 扫描仪可以用来写入文件吗?

c# - Simple Injector - 注册抽象类实现的 IEnumerable

c# - 长期运行的 Windows 服务中的依赖注入(inject) - Composition root 是正确的想法吗?

dependency-injection - 将依赖注入(inject)到域模型中的技术

java - 检测从 Intent 发送的短信,无需 SmsManager