I've next problem with injecting ViewModel into fragment:
error: [Dagger/DependencyCycle] Found a dependency cycle:
public interface FragmentComponent {
^
...ViewModelFactory is injected at
...ViewModelModule.bindViewModelFactory(viewModelFactory)
...ViewModelFactory is injected at
...SplashFragment.viewModelFactory
...SplashFragment is injected at
...FragmentComponent.inject(ru.syncended.jlocationtracker.auth.fragments.SplashFragment)
Where FragmentComponent code:
public interface FragmentComponent {
void inject(SplashFragment splashFragment);
}
ViewModelFactory code:
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> viewModelProviders;
@Inject
public ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> viewModelProviders) {
this.viewModelProviders = viewModelProviders;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
Provider<ViewModel> viewModelProvider = viewModelProviders.get(modelClass);
return (T) viewModelProvider.get();
}
ViewModelModule code:
@Binds
ViewModelFactory bindViewModelFactory(ViewModelFactory viewModelFactory);
@Binds
@IntoMap
@ViewModelKey(SplashViewModel.class)
SplashViewModel bindSplashViewModel(SplashViewModel splashViewModel);
And SplashViewModel code:
@Inject
public SplashViewModel(IAuthRepository repository) ...
How I can to solve that? It's isn't like that it has dependency cycle
I've solved that problem by next solution:
I changed ViewModelModule code from:
@Binds
@IntoMap
@ViewModelKey(SplashViewModel.class)
SplashViewModel bindSplashViewModel(SplashViewModel splashViewModel);
To:
@Binds
@IntoMap
@ViewModelKey(SplashViewModel.class)
ViewModel bindSplashViewModel(SplashViewModel splashViewModel);