【问题标题】:How to inject primitive variables in Kotlin?如何在 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 点赞太无聊了。

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


【解决方案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 不支持注入私有字段”
猜你喜欢
  • 2021-12-28
  • 2020-04-26
  • 2015-09-30
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多