Dagger 2 Внедрение параметров в общий класс

Я предоставил зависимость FirebaseFirestore в модуле, и теперь я пытаюсь написать универсальный класс, и мне нужно внедрить здесь зависимость FirebaseFirestore, но я не знаю, как это сделать. вот чем я сейчас занимаюсь:

class PersistenceStore<T> : IPersistenceStore<T> {


@Inject
lateinit var db: FirebaseFirestore

   override fun addRow(item: T): T {

   }
}

Направьте меня на правильный путь, пожалуйста.

0
0
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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
}

Хорошо, спасибо, я также внедрил конструктор на корневом уровне. Теперь я застрял здесь stackoverflow.com/questions/56940711/…

Ahmad Ayyaz 08.07.2019 20:42

Другие вопросы по теме