Изложете 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 repo без чувствителна информация)


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


Отговори (1)


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

Конкретните класове получават компонент от приложението и го използват за инжектиране на зависимости.

Доста по старите начини на Dagger от преди AndroidInjector...

person Simon Guerout    schedule 16.07.2018