Ahmad Ayyaz
Ahmad Ayyaz

Reputation: 794

Dagger 2 Injecting parameters in generic class

I have provided a dependency FirebaseFirestore in a module and now I am trying to write a generic class and I need to inject FirebaseFirestore dependency here but not sure how to do it. here it is what I am doing right now:

class PersistenceStore<T> : IPersistenceStore<T> {


@Inject
lateinit var db: FirebaseFirestore

   override fun addRow(item: T): T {

   }
}

Guide me to the right path please.

Upvotes: 0

Views: 277

Answers (1)

Israel dela Cruz
Israel dela Cruz

Reputation: 806

I assume you know how to inject normally.

First solution. Not so generic. Defeats the purpose of generic.

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

Second solution. Wrapper. Inject the wrapper instead.

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
}

Upvotes: 1

Related Questions