我想设置一个项目,其中我有两个模块common-lib
和app
。匕首2:Gradle模块依赖于在另一个模块中的实现
lib模块有它自己的Dagger组件和模块,它应该是味道不可知的。
现在,它的一部分取决于模块app
中声明的特定风味资源值,所以我尝试通过接口抽象组件并覆盖模块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;
}
}
匕首模块申报app
gradle这个模块,满足实际执行的依赖。
@Module
public class NetworkConfigModule {
@Provides
@ApplicationScope
HeaderParams providesHeaderParams(KaufdaHeaderParams kaufdaHeaderParams){
return kaufdaHeaderParams;
}
@Provides
@ApplicationScope
AppHostsProvider providesAppHostsProvider(KaufdaAppHostsProvider implementation){
return implementation;
}
}
这不起作用,因为Dagger并没有重写Module类,但这是某种预期。
我的问题是,我该怎么设置我的匕首模块,所以我可以在common-lib
使用HeaderParams
和AppHostsProvider
接口,但我在app
注入它们的实现。
嗨大卫,谢谢你的回答,这听起来不错,但我仍然在努力把你的第二个建议的每一部分...... 如果NetworkComponentHolder和NetworkComponent都在'common-lib' gradle模块中,是不是我面临同样的问题,因为我不能提供他们的依赖关系的实现? – mdelolmo
@mdelolmo您将使应用程序实现接口,然后您可以获得对库中应用程序的引用,并使用该接口访问该组件。这是如果你需要在你的模块中调用'component.inject(this)'某个地方 –