El module debe ser configurado

Intento usar la nueva inyección de Dagger con Android que funciona hasta ahora.

Ahora quiero extenderlo a mis necesidades.

En mi MainActivityModule agregué un TestModule :

 @Module abstract class MainActivityModule { @ActivityScope @ContributesAndroidInjector(modules = arrayOf(TestModule::class)) internal abstract fun contributeMainActivityInjector(): MainActivity } 

El TestModule es realmente simple:

 @Module internal abstract class TestModule { @Provides internal fun provideTest(): String { return "foo bar" } } 

Pero me sale este error: TestModule must be set

Miré el código fuente generado, pero no puedo encontrar una pista de lo que tengo que hacer. También busqué esto en Google, pero solo encontré ejemplos simples 🙁

¿Qué he olvidado? Puede encontrar la aplicación completa en GitHub .

Editar

Como provideTest() Jeff Bowman, el provideTest() debe ser estático. Cuando creo una class Java como esta:

 @Module public class TestModule { @Provides static String provide() { return "foo bar"; } } 

funciona.

Entonces la pregunta final: ¿Cómo hacer esto en Kotlin? Esto no funciona:

 @Module internal abstract class TestModule { companion object { @Provides @JvmStatic internal fun provideTest(): String { return "foo bar" } } } 

Entonces necesito otra forma de crear un método estático.

Sí, encontré una solución 🙂

La forma de Kotlin de get un método static es poner el método en un companion object pero ahora Dagger arroja un error que @Provides que @Provides solo se puede usar en un @Module . Para arreglar esto anoté el companion object también

 @Module internal abstract class TestModule { @Module companion object { @Provides @JvmStatic internal fun provideTest(): String { return "foo bar" } } } 

Una solución alternativa, que es un poco más limpia en caso de que necesite simular / replace dependencies en las testings, sería evitar que la class sea abstracta, y mantener el suministro no estático, como este:

 @Module internal class TestModule { @Provides internal fun provideTest(): String { return "foo bar" } } 
  • ¿Puede Kotlin permitir una function que devuelva un valor del tipo de implementación de esta interfaz?
  • Firebase-Firestre no carga la información de 2 documentos simultáneamente
  • Lea la línea y agregue algo al final
  • Kotlin generics en KFunction1
  • El complemento Anko no se puede ejecutar en la versión de Androidstudio> 2.1
  • Kotlin DSL para crear objects json (sin crear basura)
  • ¿Por qué == crea error de compilation en diferentes types en Kotlin?
  • Escribir un timer usando Handler en Kotlin
  • Escape $ {something} en una cadena de Kotlin
  • La mejor forma de manejar los retornos en el pnetworkingicado
  • Koltin MyClass.class.java Referencia no resuelta: java