Разоблачение Multibinding через зависимость компонента

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


person Simon Guerout    schedule 04.07.2018    source источник


Ответы (1)


Не прямой ответ, но в итоге я создал абстрактные действия/фрагменты/сервисы в моем модуле бизнес-логики и конкретные классы в модуле DI.

Конкретные классы получают компонент из приложения и используют его для внедрения зависимостей.

В значительной степени старые пути Dagger до AndroidInjector...

person Simon Guerout    schedule 16.07.2018