J'essaie d'utiliser le nouveau Dagger Android injection thing qui fonctionne jusqu'à maintenant.Le module doit être réglé
Maintenant je veux l'étendre à mes besoins.
Dans mon MainActivityModule
j'ai ajouté un TestModule
:
@Module
abstract class MainActivityModule {
@ActivityScope
@ContributesAndroidInjector(modules = arrayOf(TestModule::class))
internal abstract fun contributeMainActivityInjector(): MainActivity
}
Le TestModule
est très simple:
@Module
internal abstract class TestModule {
@Provides
internal fun provideTest(): String {
return "foo bar"
}
}
Mais je reçois cette erreur: TestModule must be set
J'ai regardé dans le code source généré mais ne peux pas trouver un indice de ce que je dois faire. Je recherchais cela à Google, mais aussi trouvé que des exemples simples :-(
Qu'ai-je oublié? Vous pouvez trouver l'application complète à GitHub.
Modifier
Comme Jeff Bowman sayed le provideTest()
doit être statique Lorsque je crée une classe Java comme ceci:..
@Module
public class TestModule {
@Provides
static String provide() {
return "foo bar";
}
}
cela fonctionne
Donc la dernière question: Comment faire cela à Kotlin? Cela ne fonctionne pas:
@Module
internal abstract class TestModule {
companion object {
@Provides
@JvmStatic
internal fun provideTest(): String {
return "foo bar"
}
}
}
J'ai donc besoin d'une autre méthode pour créer une méthode statique.
En Java, vous vous attendez à ce que la méthode '@ Provides' soit statique, ce qui signifie que rien n'utilise une instance de' TestModule'. Cependant, [Kotlin ne supporte pas les méthodes statiques en tant que telles] (https://kotlinlang.org/docs/reference/classes.html#companion-objects). Je ne suis pas assez familier avec Kotlin pour fournir une vraie réponse, mais il semble que Dagger ait besoin d'une instance car 'provideTest' est non-statique, et ne croit pas pouvoir instancier TestModule via un constructeur public sans argument. –