2016-10-17 5 views
3

내가 3 명을 가지고있다 메인 응용 프로그램 구성 요소 :단검이 개 구성 요소 체인 종속성

@Singleton 
@Component(modules = {AppModule.class, UserModule.class, DatabaseModule.class}) 
public interface AppComponent { 
    Context getContext(); 

    DatabaseHelper getDatabaseHelper(); 

    UserManager getUserManager(); 
} 

저장소 구성 요소 :

@DataScope 
@Component(dependencies = AppComponent.class, modules = CategoryRepositoryModule.class) 
public interface CategoryRepositoryComponent { 
    CategoryRepository getCategoryRepository(); 
} 

그리고 화면 구성 요소 :

@MenuScope 
@Component(dependencies = CategoryRepositoryComponent.class, modules = {MenuModule.class, DrawerModule.class}) 
interface MenuComponent { 
    void inject(MenuActivity activity); 
} 

문제가 있다는 것입니다 내 MenuComponent는 AppComponent를 제공하는 종속성을 볼 수 없습니다. 그러나 MenuComponent는 CategoryRepositoryComponent에 의존하고 CategoryRepositoryComponent는 AppComponent에 의존하므로, MenuComponent는 AppComponent (MenuComponent -> CategoryRepositoryComponent -> AppComponent)를보아야한다.

것은 내가 게터가

@DataScope 
@Component(dependencies = AppComponent.class, modules = CategoryRepositoryModule.class) 
public interface CategoryRepositoryComponent { 
    CategoryRepository getCategoryRepository(); 

    DatabaseHelper getDatabaseHelper(); 

    UserManager getUserManager(); 
} 

을 CategoryRepositoryComponent에 추가됩니다 그러나 중복, 잘못된 그게 전부 보이는 경우. 이 문제를 깨끗하고 정확한 방법으로 해결하는 방법을 알고 계십니까?

고마워, 닉.

답변

3

귀하의 접근 방법이 정확합니다. 구성 요소는 직접 상위 구성 요소가 명시 적으로 노출하는 유형에만 액세스 할 수 있습니다.

이것은 부모로서 모든 의존 관계를 자신에게 의존하는 사람에게 공개하고 싶지 않을 때 유용 할 수 있습니다. 예를 들어, Parent은 BankComponent에 따라 다를 수 있으며 BankAccountChildren에 노출시키지 않을 수 있습니다.

대체 방법은 Subcomponent입니다. 문서 및 기타 답변을 이해하는 데 도움이됩니다 : Dagger 2 subcomponents vs component dependencies.

+0

이 정확하면 여기에서 하위 구성 요소를 사용하는 샘플 프로젝트를 찾을 수 있습니다. http://github.com/mmirhoseini/fyber_mobile_offers –

관련 문제