【问题标题】:Dagger2 singleton in Kotlin and JavaKotlin 和 Java 中的 Dagger2 单例
【发布时间】:2018-07-16 09:48:10
【问题描述】:

我想作为单例注入到一个类中,但 Dagger 将其他实例注入到 Kotlin 文件而不是 Java 文件。 为什么会这样?

【问题讨论】:

  • 你可能忘记了apply plugin: 'kotlin-kapt'

标签: android kotlin singleton dagger-2


【解决方案1】:

您没有提供代码,因此很难给出完整的答案。但是,我的猜测是您正在创建 2 个不同的组件实例,一个在 Kotlin 中,一个在 Java 中。 但是,只有当您始终重用相同的组件时,Dagger 才能“保证”单个实例。如果您创建了两个不同的组件实例,一个在 Kotlin 中,一个在 Java 中,它将无法重用您的“单例”模块的同一个实例。

这背后的原因是,在生成组件时,Dagger 会在您第一次调用它时插入一些逻辑来创建模块的新实例,然后在您想要获取的所有后续时间中返回“缓存”实例相同的模块。

【讨论】:

  • 谢谢,你是对的,但我应该显示我的代码的哪一部分。很长一段时间以来,我一直将这个类用作单例(由 Dagger 编写)。现在我刚刚将我用 Kotlin 编写的活动添加到我的 appComponent 类中,并且在活动的 onCreate() 中,我从 Application 中获取 appComponent,就像在我的其他类(用 Java 编写)中一样,我尝试使用 @Inject 注释注入我的单例,但是注入到kt文件中的类与注入到其他java文件中的类不同。
  • 能否请您展示如何从 Kotlin 获取组件?
  • (application as IndexApplication).appComponent.inject(this) 我在我的Application类pastebin.com/Lqwx83Bn中像单例一样初始化应用程序
猜你喜欢
  • 1970-01-01
  • 2019-10-17
  • 2017-10-12
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多