我目前正在开发多模块应用程序。 基本上有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中)
答案 0 :(得分:0)
不是一个直接的答案,但是我最终在我的业务逻辑模块中进行了抽象活动/片段/服务,并在DI模块中进行了具体的类。
具体类从应用程序获取一个组件,并使用它来注入依赖项。
几乎是AndroidInjector之前的Dagger旧方式...