@Singleton 注释 class 在 Kotlin 中使用 Dagger2 创建多个实例

@Singleton annotated class creates multiple instances with Dagger2 in Kotlin

我有一个 class 像这样用 @Singleton 注释:

@Singleton
class SomeClass @Inject constructor() { ... }

我在其他 class 中像这样使用它:

class OtherClass {
  @Inject 
  lateinit var someclass: SomeClass
  init { DaggerAppComponent.create().inject(this) }
}

@Component
@Singleton
interface AppComponent {
  fun inject(otherClass: OtherClass)
}

但是我在注入 SomeClass 的每个 class 中得到不同的实例。我做错了什么?

通过在 OtherClass init{} 块中调用 DaggerAppComponent.create(),您始终会为每个 OtherClass 实例创建一个新的 DaggerAppComponent。 您应该将您的组件缓存在您的应用程序范围内,以使那些 @Singleton 注释对您有效。

我认为 Application class 是这样做的好地方。你可以找到一个小例子 here.