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