В последнее время я много работаю с Dagger 2, и у меня есть конкретный вариант использования, который я не могу сделать так, как хочу, по разным причинам: 1) это невозможно; 2) Я просто не понимаю концепции областей действия и компонентов/подкомпонентов.
У меня есть 3 компонента: AppComponent, DBComponent, ActivityComponent.
Мне нужно, чтобы моя активность наследовала зависимости от AppComponent и DBComponent. Это моя следующая установка:
Компонент приложения:
@Singleton
@Component(modules = { AppModule.class }) {
EventBus bus()
ActivityComponent plus(ActivityModule activityModule);
}
Компонент базы данных:
@Database
@Component(dependencies = AppComponent.class, modules = DatabaseModule.class) {
ActivityDependency activityDependency();
}
Компонент Активности:
@PerActivity
@Subcomponent(modules = ActivityModule.class) {
void inject(MainActivity activity);
}
Когда я внедряю bus(), все работает нормально, но как только я пытаюсь внедрить ActivityDependency(), он просто не работает. Я не могу понять, почему...
Обратите внимание: я прочитал почти все сообщения здесь и за его пределами, объясняющие области действия, компоненты и подкомпоненты, и до сих пор не могу понять, как добиться того, чего я хотел.
Примечание 2. Я знаю один способ исправить это: добавить DatabaseModule.class в качестве модуля в AppComponent и удалить DatabaseComponent из уравнения. Но я чувствую, что это сделает AppComponent слишком большим количеством информации, и это не совсем правильный путь.