J'ai utilisé les nouvelles fonctions d'injection dagger.android
et jusqu'à présent, je les ai vraiment appréciées.Est-il possible d'injecter un adaptateur Recycler View avec Dagger 2.11
Cependant, j'ai rencontré ce problème minuscule où il semble impossible d'injecter sur le terrain un adaptateur ou, fondamentalement, toute classe de non-activité que j'utilise.
Je sais que ce serait plus facile à @Inject
le constructeur mais puisque je passe les données à mon recyclerview à travers le constructeur, ce n'est pas une option pour moi.
Cela signifie que je dois appeler le composant pour injecter ma classe.
Avec une classe AppComponent
qui ressemble à ceci:
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder {
abstract fun networkModule(networkModule: NetworkModule): Builder
}
fun inject(someClass SomeClass)
}
Le produit DaggerAppComponent
ne reconnaît pas une méthode .inject()
après avoir dit DaggerAppComponent.builder().build()
Je suis malentendu évidemment quelque chose Dagger parce que cela semble être le manière canonique d'injecter une classe.
Je suppose que c'est parce que je vais de AndroidInjector
mais si c'est le cas, comment pourrais-je injecter une classe de non-activité. Parce que même si je faisais un @Subcomponent
pour cette classe, il faudrait quand même l'appeler de DaggerAppComponent
La façon dont j'ai fini par contourner ce problème était la lecture de cet article https: // blog. davidmedenjak.com/android/2017/11/11/dagger-rules-engagement.html et abandonnant l'hypothèse que je ne pouvais pas construire ou injecter l'adaptateur. Bien sûr, je pouvais mais - comme l'article l'a dit - je copiais et collais du code dont je ne connaissais pas la fonction. Après avoir ajouté une variable publique à l'adaptateur qui contenait les éléments, je pouvais arrêter de les passer à travers le constructeur et ensuite injecter les dépendances nécessaires sans aucun problème. Cependant, cela implique également d'injecter l'adaptateur dans le modèle de vue. – nmu