2017-09-04 13 views
0

내가이 문서 https://google.github.io/dagger/api/latest/dagger/Component.html에서 SubComponentsComponent Dependencies의 차이를 읽고 너무 Dagger 2 subcomponents vs component dependencies하위 구성 요소는

는 사람이 줄을 예제를 통해 무엇을 의미하는지에 대해 좀 도와 줄래이 스레드를 읽어 종속성.

하위 구성 요소는 상위 구성 요소와 하위 구성 요소로 정의 된 바인딩을 사용할 수 있습니다. 대안으로 구성 요소는 구성 요소 종속성을 선언하여 다른 구성 요소 인터페이스의 바인딩 만 사용할 수 있습니다. 형식이 구성 요소 종속성으로 사용될 때 종속성에 대한 각 제공 방법은 공급자로 바인딩됩니다. 구성 요소 종속성을 통해 제공 방법으로 공개 된 바인딩 만 사용할 수 있습니다.

답변

4

Java SubComponent extends ParentComponent과 같은 하위 구성 요소는 모두 protected입니다. 부모와 같은 회원에게 액세스 할 수 있으며 모든 부모 물건을 사용할 수 있습니다.

반면에 구성 요소 종속성은 클래스가 노출하는 공용 메서드에만 액세스 할 수있는 대리인 개체와 같습니다.


단검이 만들고 제공 할 수있는 클래스가 2 개 있다고 가정합니다. 이것이 무엇이든간에. 생성자 삽입을 사용하거나 모듈에서 객체를 생성하는 경우에는 별 문제가되지 않습니다 ... 우리는 다음에 표시 할에 의해 제공 될 수있는 2 개의 클래스가 있다고 가정합니다.

// some module can create either object 
class ComponentPrivateObject {} 
class ExposedObject {} 

어디서 왔는지는 중요하지 않습니다. 다음 부분은 재미있는 비트입니다. 이 클래스의 중 하나가을 반환합니다. 이것은 대거가 프로 비전 방법이라고 부르는 것입니다. 이 구성 요소가 해당 클래스를 제공 할 수 있다고합니다.

@Component(modules=/* some modules */) 
class BaseComponent { 

    // BaseComponent can provide ExposedObject! 
    ExposedObject exposedObject(); 

} 

부성분 종속 성분의 차이

는 단지 부모 그래프 연장 때문에 처음에 자바 샘플로서 Subcomponent 모두 ComponentPrivateObjectExposedObject에 액세스 할 수 있다는 것이다. 한편
// can use either class, it just adds to the parent 
@Subcomponent 
class Subcomponent {} 

, DependentComponentExposedObject에 액세스 할 수 있습니다. BaseComponent의 그래프를 확장하지는 않지만 일부 개체에 대해서는 BaseComponent을 공급자로 바인딩합니다. 자바 예제와 같이 위의 공개 API를 사용하여, 당신은 ComponentPrivateObject를 사용하려고하면 단검이

// binds component dependency as provider 
@Component(dependency=BaseComponent.class) 
class DependentComponent{} 

한 부모를 확장 ... 그것은 제공 할 수없는 다른 하나는 말할 것 같은 공개 API를 사용합니다.

+1

"Java SubComponent가 ParentComponent를 확장하는 것처럼 하위 구성 요소로 생각하지 마십시오." 구성 요소와 하위 구성 요소 간에는 상속 관계가 없습니다. 그보다는 내부 클래스와 같은 것으로 간주합니다 (내부 클래스와 마찬가지로). 내부 클래스는 모든 요소에 액세스 할 수 있다는 점에서이를 구현합니다. – gk5885