gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:52:17 25 4
gpt4 key购买 nike

我正在尝试建立一个项目,其中有两个模块 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com