我在带有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
实例(例如,将其放入实例变量中)。