微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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方式……

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐