我在带有pom文件的kotlin项目中使用了Dagge2。我在我的android项目中使用了Dagger,效果很好。但是我不知道为什么Dagger会在kotlin中为我的每个对象生成多个实例。

以下是我的组件

@Singleton
@Component(modules = [MeterCollectionModule::class])
interface AppComponent {

fun meterCollection(): MeterCollection

}

这是我的模块
@Module(includes = [UtilModule::class])
class MeterCollectionModule {

@Singleton
@Provides
fun meterCollection() = MeterCollection()
}

这就是我构建 AppComponent 的方式
 DaggerAppComponent
      .builder()
      .build()
      .inject(this)

我调试代码,然后看到每次注入(inject)MeterCollection类都会给我新的对象。

最佳答案

仅当您重新使用同一组件时,才会考虑@Singleton注释(以及任何其他范围注释)。换句话说,Dagger无法在同一组件的不同实例之间遵守@Singleton范围。

因此,为了注入(inject)相同的MeterCollection实例,您还应该重用相同的DaggerAppComponent实例(例如,将其放入实例变量中)。

08-03 21:19