Связывающие классы не генерируются Dagger 2 - PullRequest
0 голосов
/ 21 февраля 2019

Я довольно новичок в библиотеке 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);
    }
}

Даже если у меня есть весь код выше, когда я пытаюсь получить доступ к классам привязки, их там нет.Я попытался очистить, восстановить, импортировать проект снова и ничего не получалось.Я что-то упустил?

...