SubComponent
컴포넌트로 부터 멀티 바인드 된 Set 또는 Map을 SubComponent도 그대로 물려받을 수 있습니다.
@Component(modules = ParentModule.class)
public interface ParentComponent {
Set<String> strings();
ChildBuilderComponent.Builder childCompBuilder();
ChildFactoryComponent.Factory childCompFactory();
}
@Module(subcomponents = ChildBuilderComponent.class)
public class ParentModule {
@Provides
@IntoSet
String string1() {
return "parent string 1";
}
@Provides
@IntoSet
String string2() {
return "parent string 2";
}
}
부모 Component와 부모 Module을 만듭니다.
@Module
public class ChildModule {
@Provides
@IntoSet
String string3() {
return "child string 1";
}
@Provides
@IntoSet
String string4() {
return "child string 2";
}
}
ChildModule을 생성합니다.
@Subcomponent(modules = ChildModule.class)
public interface ChildBuilderComponent {
Set<String> strings();
@Subcomponent.Builder
interface Builder {
ChildBuilderComponent build();
}
}
@Subcomponent(modules = ChildModule.class)
public interface ChildFactoryComponent {
Set<String> strings();
@Subcomponent.Factory
interface Factory {
ChildFactoryComponent newChildFactoryComponent();
}
}
Builder 패턴 혹은 Factory 패턴으로 ChildComponent를 구성합니다.
그리고나서 테스트를 해봅니다.
private void testDaggerBuilder() {
ParentComponent parentComponent = DaggerParentComponent.create();
ChildBuilderComponent childBuilderComponent = parentComponent.childCompBuilder().build();
Log.d(TAG, "List set in Parent");
for (String str : parentComponent.strings()) {
Log.d(TAG, str);
}
Log.d(TAG, "List set in Child");
for (String str : childBuilderComponent.strings()) {
Log.d(TAG, str);
}
}
private void testDaggerFactory() {
ParentComponent parentComponent = DaggerParentComponent.create();
ChildFactoryComponent childFactoryComponent = parentComponent.childCompFactory().newChildFactoryComponent();
Log.d(TAG, "List set in Parent");
for (String str : parentComponent.strings()) {
Log.d(TAG, str);
}
Log.d(TAG, "List set in Child");
for (String str : childFactoryComponent.strings()) {
Log.d(TAG, str);
}
}
D/test_dagger: List set in Parent
D/test_dagger: parent string 1
D/test_dagger: parent string 2
D/test_dagger: List set in Child
D/test_dagger: child string 2
D/test_dagger: child string 1
D/test_dagger: parent string 1
D/test_dagger: parent string 2
테스트 결과 자식 Component가 부모 Component를 상속받아 부모 Component로 부터 Multi binding된 의존성을 그대로 물려받는것을 확인할 수 있습니다.
Reference
옥수환, 『아키텍처를 알아야 앱 개발이 보인다.』, 비제이퍼블릭(2020)
'Android' 카테고리의 다른 글
[Dagger2] Assisted Injection (0) | 2021.05.10 |
---|---|
[Dagger2] Multi Binding(3) (0) | 2021.05.03 |
[Dagger2] Multi Binding(1) (0) | 2021.05.02 |