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

Sim*_*out 5 android dagger dagger-2

我目前正在开发一个多模块应用程序。基本上有4个模块:

  • 带有 UI 的应用模块
  • 带有模型/接口的合同模块
  • 具有实际业务逻辑的实现模块
  • 依赖注入模块,它允许为应用程序提供实现

这意味着应用程序不直接依赖于 implementations 模块。

我基本上有以下设置:

应用程序组件

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

基础组件

@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();
}
Run Code Online (Sandbox Code Playgroud)

除了使用安装在 BaseComponent 中的 @ContributesAndroidInjector 的模块外,此设置完美运行:我没有找到一种方法将包含 AndroidInjector 的映射暴露在 BaseComponent 上并添加到 ApplicationComponent 中。

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

(我会尝试将这个问题提取到一个没有敏感信息的 git repo)

Sim*_*out 0

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

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

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