azabost
06/16/2017, 3:07 PM@IntoMap
bindings.
Having this module:
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(MainActivityViewModel::class)
abstract fun bindMainActivityViewModel(mainActivityViewModel: MainActivityViewModel): ViewModel
@Binds
abstract fun bindViewModelFactory(factory: InjectingViewModelFactory): ViewModelProvider.Factory
}
and this class:
@Singleton
class InjectingViewModelFactory @Inject constructor(
private val viewModelProviders: Map<Class<out ViewModel>, Provider<ViewModel>>
) : ViewModelProvider.Factory
I get an error:
app\build\tmp\kapt3\stubs\debug\com\example\myapp\di\AppComponent.java5 error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.And when I change the implementation of
InjectingViewModelFactory
to Java like this:
@Singleton
public class InjectingViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;
@Inject
public InjectingViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
this.creators = creators;
}
}
it works OK.
Can you please tell me what I'm doing wrong?