Я сейчас работаю над мультимодульным приложением.
Есть в основном 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-репозиторий без конфиденциальной информации)