[英]Dagger 2 - Dependency between SubComponents
我正在一個具有多個作用域的Android項目中工作,所以我組織了以下內容:
@Scope
public @interface @ScopeA {}
public class ElementA {
@Inject
DependencyAa dependencyAa;
}
@Module
public class ElementAModule {
private ElementA elementA;
public ElementAModule(ElementA elementA){
this.elementA = elementA;
}
@ScopeA
@Provides
public ElementA providesElementA(){
return this.elementA;
}
}
public class ElementB {
@Inject
DependencyB dependencyB;
}
@Module
public class ElementBModule {
private ElementB elementB;
public ElementBModule(ElementB elementB){
this.elementB = elementB;
}
@ScopeA
@Provides
public ElementB providesElementB(){
return this.elementB;
}
}
長話短說,我有幾個元素(A,B),每個元素都有一個依賴項( 分別是A,B),它們被注入。 所以我的問題是, 這種依賴的最佳方法是什么?
每個元素的一個子組件,其中包括所有依賴項的通用模塊。
@Module
public class DependenciesModule {
@ScopeA
@Provides
public DependencyAa providesDependencyAa(){
// return DependencyAa
}
@ScopeA
@Provides
public DependencyB providesDependencyAb(){
// return DependencyB
}
}
@ScopeA
@Subcomponent(modules = { ElementAModule.class , DependenciesModule.class })
public interface ElementASubcomponent {
void inject(ElementA elementA);
}
@ScopeA
@Subcomponent(modules = {ElementBModule.class , DependenciesModule.class})
public interface ElementBSubcomponent {
void inject(ElementB elementB);
}
一個常規的Element子組件,它依賴於常規的依賴模塊。 自定義范圍將如何工作?
@ScopeA
@Subcomponent(modules = {ElementAModule.class ,
ElementBModule.class , DependenciesModule.class}){
void inject(ElementA elementA);
void inject(ElementB elementB);
}
每個Element的一個子組件,該子組件僅取決於ElementXModule,在其中提供了相應的依賴項
@Module
public class ElementAModule {
private ElementA elementA;
public ElementAModule(ElementA elementA){
this.elementA = elementA;
}
@ScopeA
@Provides
public ElementA providesElementA(){
return this.elementA;
}
@ScopeA
@Provides
public DependencyAa providesDependencyAa(){
// return DependencyAa
}
}
另外還有其他建議值得歡迎嗎?
提前致謝
這里似乎有兩個問題:如何組織模塊以及如何使用范圍。
如何組織您的Module
實例將取決於相關性如何關聯(如果確實存在關聯)。 此處可能沒有足夠的信息來確定確切的位置,但您可以問自己:
有機會一起使用DependencyA
和DependencyB
來構造任何Element
,例如ElementC
嗎? 如果沒有,它們可能應該在單獨的模塊中。 當然,除非您希望將某種用例的相似性合為一個邏輯整體。 例如,您可能希望將與持久性相關的所有依賴項歸為一個模塊。
關於第二個問題,當您使用子組件向下移動對象圖時,只能從較寬的范圍移動到較窄的范圍。 因此,在頂部組件中,您的應用程序可能具有單例。 然后,在范圍較窄的子組件中,可能是活動的依賴項。 “同級”作用域組件不能互相訪問成員,但可以從父組件訪問公開的成員。
一個使用范圍的Android項目的好例子可以在這里找到。 在這種情況下,他們已根據用例將依賴項分組為模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.