3 votes

Le contexte ne peut pas être fourni sans une méthode annotée @Provides- ou @Produces- en kotlin

Je utilise Dagger pour l'injection de dépendances en Kotlin. Maintenant, voici les classes nécessaires

ModuleActivité

@Module class ModuleActivité (val activité : Activité){
    @Provides
    @ContexteActivité
    fun fournirContexte() : Contexte{
        return activité
    }
}

ComposantActivité

@ParActivité
@Component(dependencies = arrayOf(ComposantApplication::class), modules = arrayOf(ModuleActivité::class))
interface ComposantActivité {
    fun injecter(activité: ActivitéPrincipale)
}

ActivitéPrincipale

@Inject @ContexteActivité lateinit var contexte:Contexte
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        DaggerComposantActivité.builder()
.applicationComponent(AppliPrincipale.getInstance().getComposantApplication()).moduleActivité(ModuleActivité(this)).build()
.injecter(this);

Maintenant, je reçois l'erreur suivante

erreur: android.content.Contexte ne peut pas être fourni sans une méthode annotée @Provides ou @Produces.
e: 

e:     public abstract void injecter(@org.jetbrains.annotations.NotNull()
e:                          ^
e:       android.content.Contexte est injecté à
e:           app.feed.com.ui.ActivitéPrincipale.contexte
e:       app.feed.com.ui.ActivitéPrincipale est injecté à
e:           app.feed.com.injection.component.ComposantActivité.injecter(p0)

Je utilise le même code en Java et ca fonctionne bien mais ici en Kotlin, cela donne l'erreur, aussi les dépendances de ComposantApplication fonctionnent bien. En attendant, je utilise les versions suivantes de gradle et kotlin

buildscript {
    ext.kotlin_version = '1.1.2-3'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Veuillez m'aider à comprendre ce que je fais mal

4voto

tynn Points 17673

Vous avez injecté la propriété

@Inject @ActivityContext lateinit var context: Context

ne fait que annoter la propriété avec @ActivityContext. Ainsi, Dagger recherche un fournisseur pour un simple Context sans aucun qualificatif. Au lieu de cela, vous devez annoter le champ avec

@Inject @field:ActivityContext lateinit var context: Context

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X