android - Dagger 2 : Gradle module dependency with implementation in another module

标签 android gradle dependency-injection dagger-2

我正在尝试建立一个项目,其中有两个模块 common-libapp .

lib 模块有自己的 Dagger 组件和模块,它应该与风格无关。

现在,它的一部分取决于模块 app 中声明的特定于 flavor 的资源值。 ,所以我尝试通过接口(interface)抽象组件并在模块 app 中覆盖其实现.

Dagger 模块在 common-lib 中声明gradle 模块,满足与 NoOp 实现的依赖关系。

    @Module
public class NetworkConfigModule {
    @Provides
    @Singleton
    HeaderParams providesHeaderParams(NoOpHeaderParams noOpHeaderParams){
        return noOpHeaderParams;
    }

    @Provides
    @Singleton
    AppHostsProvider providesAppHostsProvider(NoOpAppHostsProvider noOpAppHostsProvider){
        return noOpAppHostsProvider;
    }
}

Dagger 模块在 app 中声明gradle 模块,满足与实际实现的依赖关系。
@Module
public class NetworkConfigModule {

    @Provides
    @ApplicationScope
    HeaderParams providesHeaderParams(KaufdaHeaderParams kaufdaHeaderParams){
        return kaufdaHeaderParams;
    }

    @Provides
    @ApplicationScope
    AppHostsProvider providesAppHostsProvider(KaufdaAppHostsProvider implementation){
        return implementation;
    }
}

这是行不通的,因为 Dagger 只是没有覆盖 Module 类,但这是意料之中的。

我的问题是,如何设置 Dagger 模块以便使用 HeaderParamsAppHostsProvider common-lib 中的接口(interface),但我在 app 中注入(inject)了它们的实现.

最佳答案

最简单的方法是在您的 app 中处理组件创建。 .

在您的应用程序中,您知道要使用的实际模块和类。如果您在那里创建组件,您只需将正确的模块添加到组件中,注入(inject)您的 common-lib上课并完成。

如果您不想在应用程序中处理注入(inject),则需要定义一个接口(interface),例如

interface NetworkComponentHolder {
    NetworkComponent getNetworkComponent();
}

然后你可以用你的 Application 来实现在 app .同样,您必须在 app 中创建组件和模块。 ,但随后您可以从您的模块中调用
((NetworkComponentHolder) getApplication()).getNetworkComponent().inject(this);

这将是不使用反射的两种可能性。

关于android - Dagger 2 : Gradle module dependency with implementation in another module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36135529/

相关文章:

java - 如何启动服务在android中重复做某事

android - 我有一个从 sql 数据库获取信息的 ListView ,并且我设置了 OnItemLongClickListener

elasticsearch - 使用 gradle 设置基本插件

c# - 如何使用简单注入(inject)器在自定义 ClaimsPrincipal 中注入(inject)服务

php - 扩展类时的构造函数注入(inject)

java - 为 Android 创建 GUI 的具体过程是什么?

android - 如何使用 Titanium 在设备中调试应用程序?

android - packageDebug > 无法在 Android Studio 上封装 APK

android - 基于 Gradle 中构建变体的不同可绘制对象

php - Symfony2 - 在 services.xml 中导入 config.yml