我目前正在开发一个多模块应用程序.
基本上有4个模块:
>带有UI的app模块
>契约模块与模型/接口
>具有实际业务逻辑的实现模块
>依赖注入模块,允许为应用程序提供实现
这意味着应用程序不直接依赖于实现模块.
我基本上有以下设置:
应用程序组件
@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仓库)
解决方法:
不是一个直接的答案,但我最终在我的业务逻辑模块中制作抽象活动/片段/服务,并在DI模块中制作具体类.
几乎与AndroidInjector之前的旧Dagger方式……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。