2016-10-26 9 views
0

사이의 종속성 그래서 나는이 같은 조직 : 는 단검이 내가 여러 범위로 안드로이드 프로젝트에서 일하고 있어요 하위

@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); 
} 

하나의 일반 요소 하위 구성 요소는 일반 종속성 모듈에 따라 다릅니다. 이 기능은 사용자 지정 범위에서 어떻게 작동합니까? 해당 의존성

@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 
    } 
} 

또 다른 제안은 환영 이상이다

을 제공하는하는 ElementXModule에만 dependends 각 요소에 대한

@ScopeA 
@Subcomponent(modules = {ElementAModule.class , 
    ElementBModule.class , DependenciesModule.class}){ 

    void inject(ElementA elementA); 
    void inject(ElementB elementB); 

} 

부성분 하나? 모듈을 구성하는 방법과 범위에서 작동하는 방법 : 사전

답변

0

에서

덕분에 여기이 개 질문 것 같다.

인스턴스를 구성하는 방법은 종속성이 실제로 관련되어있는 경우 종속성이 어떻게 관련되는지에 따라 달라집니다. 이 여기에 제공된 충분한 정보를 정확히 결정하는 아마가 아니라 당신 자신에게 물어 수 : DependencyADependencyB 어떤 Element, 말, ElementC를 구축하기 위해 함께 사용되는 것을 기회는

있습니까? 그렇지 않은 경우에는 별도의 모듈에 있어야합니다. 물론, 논리적 전체에서 함께 그룹화하려는 유스 케이스의 유사성이없는 한. 예를 들어, 지속성과 관련된 모든 종속성을 하나의 모듈로 그룹화하고자 할 수 있습니다.

두 번째 질문에서 하위 구성 요소를 사용하여 개체 그래프를 아래로 이동하면 더 넓은 범위에서 좁은 범위로 이동할 수 있습니다. 따라서 최상위 구성 요소에는 응용 프로그램에 대한 싱글 톤이있을 수 있습니다. 그런 다음 범위가 더 좁은 하위 구성 요소 (아마도 활동의 종속성)에 있습니다. "형제"범위가 지정된 구성 요소는 서로간에 멤버에 액세스 할 수 없지만 부모 구성 요소에서 노출 된 멤버에 액세스 할 수 있습니다.

스코프를 사용하는 Android 프로젝트의 좋은 예는 here입니다. 이 경우에는 유스 케이스별로 모듈에 종속성을 그룹화합니다.

+0

감사합니다. 이제 알겠습니다. –

관련 문제