-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
I have a Component
to provide dependencies for Data Input:
@Component(modules = [DataInputModule::class])
interface DataInputComponent {
fun inject(activity: DataInputActivity)
@Component.Factory
interface Factory {
fun create(@BindsInstance activity: DataInputActivity, module: DataInputModule): DataInputComponent
}
}
With the module:
@Module
class DataInputModule(private val activity: DataInputActivity) {
@Provides
fun provideDataInputViewModel(repo: MyRepository, timestampProvider: TimestampProvider) =
DefaultDataInputViewModel(repo, timestampProvider)
@Provides
fun provideTimestampProvider(): TimestampProvider = DefaultTimestampProvider()
@Provides
fun provideDateTimeDialogFactory(): DateTimeDialogFactory = DateTimeDialogFactory(activity)
}
My application's component looks like so:
@Singleton
@Component(
modules = [
DataListModule::class
]
)
interface AppComponent : AndroidInjector<MyApplication> {
@Component.Factory
interface Factory {
fun create(@BindsInstance app: MyApplication): AppComponent
}
}
with the module to provide the trusty Room database and the repository.
When trying to build I get the following error:
D:\Applications\AndroidStudioProjects\MyApp\app\build\tmp\kapt3\stubs\debug\com\example\myapp\di\component\DataInputComponent.java:7: error: [Dagger/MissingBinding] com.example.myapp.di.component.DataInputComponent.Factory cannot be provided without an @Provides-annotated method. public abstract interface DataInputComponent { ^ java.util.Map<java.lang.Class,javax.inject.Provider>> is injected at
dagger.android.DispatchingAndroidInjector(injectorFactoriesWithClassKeys, …)
dagger.android.DispatchingAndroidInjector<java.lang.Object> is injected at
dagger.android.DaggerApplication.androidInjector
com.example.myapp.datalist.MyApplication is injected at
com.example.myapp.di.module.DataListModule.provideMeasurementDatabase(app)
com.example.myapp.datalist.data.database.MeasurementDatabase is injected at
com.example.myapp.di.module.DataListModule.provideMeasurementDao(db)
com.example.myapp.datalist.data.repository.dao.MeasurementDao is injected at
com.example.myapp.di.module.DataListModule.provideDataRepository(dao)
com.example.myapp.datalist.data.repository.MeasurementDataRepository is injected at
com.example.myapp.di.module.DataInputModule.provideDataInputViewModel(repo, …)
com.example.myapp.datalist.presentation.viewmodel.DataInputViewModel is injected at
com.example.myapp.datalist.presentation.view.activity.DataInputActivity.viewModel
com.example.myapp.datalist.presentation.view.activity.DataInputActivity is injected at
com.example.myapp.di.component.DataInputComponent.inject(com.example.myapp.datalist.presentation.view.activity.DataInputActivity)
I cannot add a @Provides
to the @Component
because it is not a module. I looked for docs online but found no example of anyone "provides" annotating and providing a @Factory
. So what could cause the issue here?
Note I asked this on SO but the comments' suggestions did not work.