Dagger 2通用类中的注入参数

时间:2019-07-05 17:21:42

标签: android kotlin dagger-2

我在模块中提供了一个依赖项 FirebaseFirestore ,现在我试图编写一个通用类,我需要在此处注入 FirebaseFirestore 依赖项,但不确定如何做它。这就是我现在正在做的事情:

class PersistenceStore<T> : IPersistenceStore<T> {


@Inject
lateinit var db: FirebaseFirestore

   override fun addRow(item: T): T {

   }
}

请指导我正确的路线。

1 个答案:

答案 0 :(得分:1)

我认为您知道如何正常注射。

第一个解决方案。并非如此。违反了通用的目的。

@Singleton
@Component(modules = [FireBaseFirestoneModule::class])
interface FireBaseComponent {
    fun inject(PersistenceStore<ActualItemClass> obj) // just put the actual item type in here.
}

第二个解决方案。包装器。而是注入包装器。

class PersistenceStore<T> : IPersistenceStore<T> {

   private val injectWrapper = InjectWrapper()

   constructor() {
       DaggerFireBaseComponent().builder().build()
           .inject(injectWrapper) // inject the wrapper
   }

   override fun addRow(item: T): T {

   }
}

class InjectWrapper { // put all injectable variables here
    @Inject
    lateinit var db: FirebaseFirestore
}