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



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

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

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

我基本上有以下设置:

应用程序组件

@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模块:我没有找到一种方法将包含Android注入器的映射暴露在基本组件上并添加到应用程序组件中。

有没有办法在基本组件中公开某种映射以将AndroidInjectors添加到应用程序组件中?

(我将尝试将此问题提取到没有敏感信息的 git 存储库中(

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

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

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

最新更新