Выставить Multibinding через зависимость компонента - PullRequest
0 голосов
/ 04 июля 2018

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

1 Ответ

0 голосов
/ 17 июля 2018

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

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

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

...