Android Dagger: я не могу предоставить внешний класс без конструктора @Inject

РЕДАКТИРОВАТЬ

Решила проблему. См. Мой пост ниже.

Я пишу приложение для Android с использованием кинжала и котлина.

Я хочу ввести класс java.text.SimpleDateFormat в свой класс DateHelper

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

У меня есть модуль, который @Provides SimpleDateFormat .

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

и компонент кинжала:

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

Наконец, мое 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 } } 

Теперь я пытаюсь @Inject DateHelper в свой 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) } } 

К сожалению, я получаю ошибку времени компиляции

 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) 

Я не понимаю, почему я получаю эту ошибку, так как я @Providing SimpleDateFormat . Очевидно, я не могу добавить конструктор @Inject , так как у меня нет класса SimpleDateFormat .

Любая помощь в том, что мне не хватает?

Решила проблему

Я не понимал, что проблема возникла из другого компонента, который я использую для тестирования.

У меня есть TestComponent в src/debug/java/... , который предоставляет макетные реализации для моих тестов:

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

Поскольку этот компонент расширяет MyAppComponent , я также должен предоставить привязки к нему. Очевидно, что здесь отсутствует DateModule . Изменение ниже фиксирует ошибку компиляции :

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

Я был введен в заблуждение сообщением об ошибке компиляции, в котором указано, что MyAppComponent отсутствует привязка, тогда как фактическая проблема лежит в TestComponent .

Является ли мое рассуждение правильным, что фактическое сообщение об ошибке должно относиться к TestComponent ?