我想設置一個項目,其中我有兩個模塊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)'某個地方 –