簡體   English   中英

匕首2-子組件之間的依賴關系

[英]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實例將取決於相關性如何關聯(如果確實存在關聯)。 此處可能沒有足夠的信息來確定確切的位置,但您可以問自己:

有機會一起使用DependencyADependencyB來構造任何Element ,例如ElementC嗎? 如果沒有,它們可能應該在單獨的模塊中。 當然,除非您希望將某種用例的相似性合為一個邏輯整體。 例如,您可能希望將與持久性相關的所有依賴項歸為一個模塊。

關於第二個問題,當您使用子組件向下移動對象圖時,只能從較寬的范圍移動到較窄的范圍。 因此,在頂部組件中,您的應用程序可能具有單例。 然后,在范圍較窄的子組件中,可能是活動的依賴項。 “同級”作用域組件不能互相訪問成員,但可以從父組件訪問公開的成員。

一個使用范圍的Android項目的好例子可以在這里找到。 在這種情況下,他們已根據用例將依賴項分組為模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM