2017-05-02 4 views
-1

저는 Dagger2를 처음 사용합니다. 나는 다음과 같은 구조가 있다고 가정하자 : Dagger2 & nested child injections

public class A extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     DependencyInjector.applicationComponent.inject(this); 
    } 
    ... 

    public void foo() { 
     B b = new B(); 
     **DependencyInjector.applicationComponent.inject(b);** 
    } 
} 

public class B { 
    @Inject 
    C c; 
} 

는 내 질문은, 내가 명시 적으로 "B"를 주입해야하는 모든하지만 "A"가 이미

를 주입됩니다! 또는 "A"를 주사하는 것으로 충분합니까?

답변

1

예를 들어, new에 대한 호출과 마찬가지로 B를 명시 적으로 삽입해야합니다. 단검은 그 전화를 방해 할 수 없습니다. 답변에 대한

public class A extends Activity { 
    @Inject Provider<B> bProvider; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     DependencyInjector.applicationComponent.inject(this); 
    } 
    ... 

    public void foo() { 
     B b = bProvider.get(); // This instance will be fully injected. 
    } 
} 
+0

들으 : 당신이 B를 주입 할 필요가 없습니다

은 그러나, 주입, 단검 만든 Provider에 연기에 의해, 당신은 A의 주입을 활용할 수 있습니다. 그리고 더 좋은 방법은 무엇일까요? – davidOhara

+0

대구 (Dagger)가 주사 가능한 객체 생성을 담당하게하는 것이 내 코드 샘플에있는 방식이 "더 나은 방법"입니다. Android 나 다른 프레임 워크가 여러분을 위해 생성 한 객체 (예 : 여기의 Activity 서브 클래스)에'inject' 메소드를 사용하지 마세요. 객체 그래프에 참여할 필요가없는 모델 객체와 같은 단순한 객체에 대해서는 여전히'new'를 사용할 수 있습니다; [주사제 "대"newables "에 대한 논의] (http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/)를 참조하십시오. –

+0

"c"도 삽입됩니다! – davidOhara