Android Dagger: no puedo proporcionar una class externa sin el constructor @Inject

EDITAR

Resolvió el problema. Ver mi publicación a continuación.

Estoy escribiendo una aplicación de Android con el uso de Dagger y Kotlin.

Quiero inyectar la class java.text.SimpleDateFormat en mi class DateHelper

 @Singleton class DateHelper @Inject constructor(var dateFormat: SimpleDateFormat) { ... } 

Tengo un module, que @Provides SimpleDateFormat .

 @Module class DateModule { @Singleton @Provides fun dateFormat(): SimpleDateFormat { return SimpleDateFormat("yyyy-MM-dd", Locale.US) } } 

y un componente Daga:

 @Singleton @Component(modules = arrayOf(MyAppModule::class, DateModule::class)) interface MyAppComponent { ... } 

Por último mi Application :

 open class MyApplication : Application() { private lateinit var myAppComponent: MyAppComponent override fun onCreate() { super.onCreate() myAppComponent = createGraph() } open fun createGraph(): MyAppComponent { return DaggerMyAppComponent.builder().myAppModule(MyAppModule(this)).build() } fun getAppComponent(): MyAppComponent { return myAppComponent } } 

Ahora, bash @Inject DateHelper en mi Fragment :

 class CoffeeNoteFragment : Fragment(), DatePickerDialog.OnDateSetListener { @Inject lateinit var dateHelper: DateHelper ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) (activity.application as MyApplication).getAppComponent().inject(this) } } 

Lamentablemente, recibo un error en time de compilation

 error: [com.example.mateusz.coffeenotes.application.MyAppComponent.inject(com.example.mateusz.coffeenotes.CoffeeNoteFragment)] java.text.SimpleDateFormat cannot be provided without an @Inject constructor or from an @Provides-annotated method. java.text.SimpleDateFormat is injected at com.example.mateusz.coffeenotes.database.DateHelper.<init>(arg0) com.example.mateusz.coffeenotes.database.DateHelper is injected at com.example.mateusz.coffeenotes.CoffeeNoteFragment.dateHelper com.example.mateusz.coffeenotes.CoffeeNoteFragment is injected at com.example.mateusz.coffeenotes.application.MyAppComponent.inject(arg0) 

No entiendo por qué @Providing este error, ya que estoy @Providing el SimpleDateFormat . Obviamente no puedo agregar el constructor @Inject , ya que no SimpleDateFormat class SimpleDateFormat .

¿Alguna ayuda de lo que me estoy perdiendo?

Resuelve el problema

No me di count de que el problema se produjo a partir de un componente diferente, que utilizo para las testings.

Tengo un TestComponent en src/debug/java/... , que proporciona implementaciones simuladas para mis testings:

 @Singleton @Component(modules = arrayOf(TestModule::class)) interface TestComponent : MyAppComponent 

Como este componente amplía MyAppComponent , también tengo que proporcionarle enlaces. Claramente, me falta el DateModule aquí. Cambiar a continuación corrige el error de compilation :

 @Singleton @Component(modules = arrayOf(TestModule::class, DateModule::class)) interface TestComponent : MyAppComponent 

El post de error de compilation me MyAppComponent error, que indicaba que MyAppComponent faltaba el enlace, mientras que el problema real se encuentra en TestComponent .

¿Mi razonamiento es correcto, que el post de error real debería referirse a TestComponent ?

  • No se puede "findViewById" en Kotlin. Obteniendo el error "Falló la inferencia de tipo"
  • Daga 2, no puedo inyectar presentador en mi actividad
  • Cómo restablecer el contenido de la vista de reciclador en la actividad de llamadas usando Kotlin
  • ¿Cómo puedo especificar un tipo genérico en un operador sobrecargado en Kotlin?
  • Kotlin: ¿cómo pasar una function como parámetro a otra?
  • Tratando de entender el ejemplo de Kotlin
  • Kotlin type DSLs constructor seguro, security para la function más externa
  • Mapa de cortocircuito de Kotlin {}. FirstOrNull {}
  • ¿Cómo acceder a "Activity.this" en Kotlin?
  • ¿Cómo orderar basado en / comparar múltiples valores en Kotlin?
  • Kotlin Kapt no muestra errores de data binding cuando se ejecuta desde Android Studio