Я довольно новичок в библиотеке Dagger 2, я проверил несколько руководств в Интернете и пытаюсь создать простое приложение, чтобы проверить, правильно ли я это понял.Проблема в том, что классы привязки не генерируются моим кодом, и я не знаю почему.
У меня есть это в моем файле Gradle:
implementation 'com.google.dagger:dagger:2.20'
annotationProcessor 'com.google.dagger:dagger-compiler:2.20'
implementation 'com.google.dagger:dagger-android-support:2.20'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.20'
androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.20'
androidTestAnnotationProcessor 'com.google.dagger:dagger-android-processor:2.20'
Это мой класс AppComponent:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
ActivityBuildersModule.class,
AppModule.class,
NetworkModule.class})
interface AppComponent extends AndroidInjector<App> {
@Component.Builder
abstract class Builder extends AndroidInjector.Builder<App> {}
}
У меня есть ActivityBuildersInterface:
@Module
public interface ActivityBuildersModule {
@ContributesAndroidInjector(modules = {FragmentBuildersModule.class})
MainActivity contributeMainActivity();
}
AppMudule выглядит следующим образом:
@Module(includes = ViewModelModule.class)
public class AppModule {
@Provides
@Singleton
Api provideApi(Retrofit retrofit) {
return retrofit.create(Api.class);
}
@Provides
@Singleton
OutboundFlightsRepository provideOutboundFlightsRepository(Api api) {
return new OutboundFlightsRepository(api);
}
@Provides
@Singleton
BaseScheduler provideSchedulerProvider() {
return new SchedulerProvider();
}
}
FragmentBuildersModule:
@Module
public interface FragmentBuildersModule {
@ContributesAndroidInjector
OutboundFlightsFragment contributeOutboundFlightsFragment();
@ContributesAndroidInjector
InboundFlightsFragment contributeInboundFlightsFragment();
}
Thisмой ViewModelModule:
@Module
public interface ViewModelModule {
@Binds
ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory factory);
@Binds
@IntoMap
@ViewModelKey(OutboundFlightsViewModel.class)
ViewModel bindOutboundFlightsViewModel(OutboundFlightsViewModel viewModel);
}
Мой ViewModelFactory такой:
@Singleton
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;
@Inject
ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
this.creators = creators;
}
@SuppressWarnings("unchecked")
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
Provider<? extends ViewModel> creator = creators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : creators.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if (creator == null) {
throw new IllegalArgumentException("unknown model class " + modelClass);
}
try {
return (T) creator.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
И мой класс приложения:
public class App extends DaggerApplication {
@Override
protected AndroidInjector<? extends App> applicationInjector() {
return DaggerAppComponent.builder().create(this);
}
}
Даже если у меня есть весь код выше, когда я пытаюсь получить доступ к классам привязки, их там нет.Я попытался очистить, восстановить, импортировать проект снова и ничего не получалось.Я что-то упустил?