web-dev-qa-db-fra.com

HasActivityInjector ne peut pas être résolu dans Android dagger 2

J'essayais d'implémenter HasActivityInjector dans mon Android mais cela me montre que HasActivityInjector ne peut pas être résolu. Ci-dessous les dépendances et le plugin que j'ai utilisé dans mon projet-

apply plugin: 'kotlin-kapt'

et

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'

Voici le code que j'essaie -

class RanoBoilerplateApplication : Application(), HasActivityInjector{
    @Inject
    lateinit var activityDispatchingAndroidInjector:
            DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()

        DaggerAppComponent.builder()
                .application(this)
                .build()
                .inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> =
            activityDispatchingAndroidInjector
}

Je ne sais pas quelles autres dépendances je dois inclure pour travailler cela, aidez-moi si quelqu'un l'a déjà fait.

Trouvez la dernière version de Dagger 2 ici .

Bon codage :-)

14
Bajrang Hudda

Si quelqu'un vient ici après la mise à jour vers 2.24, cela a été supprimé: https://github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c1 .

Vous pouvez utiliser HasAndroidInjector à la place.

58
mbonnin

Il est assez tard pour répondre, mais cela pourrait être utile pour quelqu'un qui est nouveau dans le monde de la dague!

Il a été remplacé par HasAndroidInjector afin d'éviter le passe-partout d'implémentation de plusieurs interfaces Dagger comme HasActivityInjector, HasServiceInjector etc. dans votre classe Application. Maintenant, il vous suffit d'implémenter HasAndroidInjector comme ci-dessous:

class DaggerExampleApplication : Application(), HasAndroidInjector{

       @Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>

       override fun androidInjector(): AndroidInjector<Any> = androidInjector
       override fun onCreate() {
         super.onCreate()
         //Your code
       }        
}
14
Subhan Ali

Mes dépendances ressemblent à ceci:

//Dagger
implementation "com.google.dagger:dagger:${libs.dagger}"
implementation "com.google.dagger:dagger-Android:${libs.dagger}"
implementation "com.google.dagger:dagger-Android-support:${libs.dagger}"
kapt "com.google.dagger:dagger-compiler:${libs.dagger}"
kapt "com.google.dagger:dagger-Android-processor:${libs.dagger}"

Le support est nécessaire si vous utilisez appcompat. Et le ${libs.dagger} fait référence à la version de poignard nécessaire (par exemple 2.16). En savoir plus sur les dépendances ici .

5
Demigod

En plus de la réponse de @mbonnin et @ Subhan, à partir de la version 2.24, Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver} sont enlevés. Si vous souhaitez toujours prendre en charge cette ancienne implémentation, utilisez la version 2.23 qui prend en charge à la fois HasAndroidInjector et Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}.

voici à quoi cela devrait ressembler sur la version 2.24

Application

class ExampleApp: Application(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../

Activité

class ExampleActivity: AppCompatActivity(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../

Fragment

class MoreFragment: Fragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../
1
Kurt Capatan

Si vous êtes un Android devloper et utilisez Kotlin (pour un code plus rapide et pour éviter beaucoup de code passe-partout), alors vous pouvez aller avec Koin -

Un framework d'injection de dépendance léger pragmatique pour les développeurs Kotliin. Écrit en Kotlin pur, en utilisant uniquement la résolution fonctionnelle: pas de proxy, pas de génération de code, pas de réflexion.

Croyez-moi, c'est trop facile que poignard2. Vous pouvez trouver plus de détails ici et site officiel .

0
Bajrang Hudda

HasActivityInjector a été introduit dans le nouveau poignard Android. Incluez les dépendances suivantes dans votre fichier build.gradle.

kapt "com.google.dagger:dagger-Android-processor:2.18"
implementation "com.google.dagger:dagger-Android-support:2.18"
0
Vipul Shah