通过组件依赖项公开多重绑定

时间:2018-07-04 06:18:52

标签: android dagger-2 dagger

我目前正在开发多模块应用程序。 基本上有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();
}

除了使用在BaseComponent中安装@ContributesAndroidInjector的模块的模块外,此设置可以完美地工作:我找不到一种方法将包含AndroidInjector的地图公开在BaseComponent上并添加到ApplicationComponent中。

有没有办法在BaseComponent中公开某种地图以将AndroidInjectors添加到ApplicationComponent?

(我将尝试在没有敏感信息的情况下将此问题提取到git repo中)

1 个答案:

答案 0 :(得分:0)

不是一个直接的答案,但是我最终在我的业务逻辑模块中进行了抽象活动/片段/服务,并在DI模块中进行了具体的类。

具体类从应用程序获取一个组件,并使用它来注入依赖项。

几乎是AndroidInjector之前的Dagger旧方式...