В момента работя върху многомодулно приложение. Основно има 4 модула:
- Модулът на приложението с потребителския интерфейс
- Модулът за договори с моделите/интерфейсите
- Модулите за внедряване с реална бизнес логика
- Модулът за инжектиране на зависимости, който позволява на приложението да бъде предоставено изпълнението
Това означава, че приложението не зависи пряко от модула за внедряване.
По принцип имам следната настройка:
Компонентът на приложението
@Component(
dependencies = {
BaseComponent.class
},
modules = {
AndroidInjectionModule.class,
AndroidSupportInjectionModule.class,
ContributesAndroidInjectorModule.class
}
)
@ApplicationScope
public interface ApplicationComponent extends AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
Builder baseComponent(BaseComponent baseComponent);
ApplicationComponent build();
}
}
Основният компонент
@Component(
modules = {
...
}
)
@Singleton
public interface BaseComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder context(@ApplicationContext Context context);
@BindsInstance
Builder configuration(AppConfiguration configuration);
BaseComponent build();
}
ExposedDependency exposedDependency();
}
Тази настройка работи перфектно, освен с модули, използващи @ContributesAndroidInjector, инсталирани в BaseComponent: Не намирам начин картата, съдържаща AndroidInjector, да бъде изложена на BaseComponent и добавена към ApplicationComponent.
Има ли начин да се изложи някаква карта в BaseComponent, за да се добавят AndroidInjectors към ApplicationComponent?
(Ще се опитам да извлека този проблем в git repo без чувствителна информация)