android – 通过组件依赖项公开Multibinding

我目前正在开发一个多模块应用程序.
基本上有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方式……

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...