2017-11-23 1 views
1

나는 단검을 배우고 있으며 나는 단지 궁금하다.Dagger2에서 구성 요소의 본문을 비울 수 있습니까?

@Singleton 
@Component(modules={AppModule.class, NetModule.class}) 
public interface NetComponent { 
    void inject(MainActivity activity); 
// void inject(MyFragment fragment); 
} 

I 필드 주입을해야합니다 클래스를 나열 : 나는 필드 주입을 사용하려는 경우, 나는 이런 식으로 뭔가를해야한다는 것을 알고 있습니다.

그리고이 구성 요소가 다른 구성 요소의 부모 인 경우도, 내가 좋아하는 뭔가가 있어야합니다

: 나도 하나를 수행 할 의도가없는 경우에, 내가 좋아하는 뭔가를 할 수 있습니다

@Component(modules={ServiceModule.class, 
       ContextModule.class, 
       SchedulerModule.class}) 
@Singleton 
public interface SingletonComponent { 
Context appContext(); 
CatTable catTable(); 
CatDao catDao(); 
CatMapper catMapper(); 
CatRepository catRepository(); 
CatService catService(); 
Retrofit retrofit(); 
DatabaseManager databaseManager(); 
@Named("MAIN") Scheduler mainThreadScheduler(); 
@Named("BACKGROUND") Scheduler backgroundThreadScheduler(); 
} 

@Singleton 
@Component(modules = arrayOf(DatabaseModule::class, AppModule::class, 
    ApiServiceModule::class)) 
interface AppComponent{ 

} 

본문이 비어 있습니다.

(필자는 필드 주사 나 자식 구성 요소가 필요할 것입니다. 나는 아무것도 놓치지 않았 음을 알고 싶습니다.)

+0

하위 구성 요소에 하위 구성 요소를 사용하는 경우에만 비어있는 본문을 가질 수 있습니다. 구성 요소 종속성은 하위 구성 요소와 거의 동일합니다. – EpicPandaForce

답변

1

완전히 빈 구성 요소 (다른 인터페이스를 확장하지 않음)는 쓸모가 없습니다. 구성 요소는 객체 그래프에 진입 점을 정의하므로 아무런 메소드가 없어도 객체로 수행 할 수있는 것은 없습니다. 회원 삽입 방법을 나열했지만, 하위 구성 요소 팩토리 메소드와 빌더구성 메소드 제공 방법을 포함 할 수도 있습니다.

ObjectA getA(); // component provision method 
void inject(B b); // members injection method, which can return void 
C inject(C c);  // ...or return the object it injects, for convenience 

// You can also make a subcomponent getter, if you supply necessary module instances... 
DSubcomponent createD(SomeModule module); 
// or just return a builder. 
ESubcomponent.Builder createEBuilder(); 

이 단검은 구성 요소 인터페이스에서 액세스 그래프 바인딩에 대한 코드를 생성하기 때문에 기억하는 것이 특히 중요합니다. , ObjectG 또는 ObjectH@Binds 또는 @Provides이있는 경우 구성 요소 인터페이스에 넣은 메소드에서 전이 할 수있는 경우가 아니면 단검 구현에 포함되지 않습니다.


종속 구성 요소 및 하위 구성 요소는 어떻게됩니까? ParentComponent에 의존 한 ChildComponent는, 「컴퍼넌트 프로 바이더 메소드」(제로 인수 취득자)를 통해서 이용할 수있는 오브젝트에 액세스 만하기 (위해) 때문에, 메소드를 가지지 않은 컴퍼넌트는 아직 쓸모가 없습니다. 주석없이 인터페이스를 제공 한 다음 ParentComponent (또는 다른 구현)를 빌더로 전달할 수도 있습니다. 어쨌든 사용 가능한 개체는 부모 구성 요소의 공용 인터페이스에 나열된 개체이며 인터페이스가 비어있는 것을 방지합니다.

종속 구성 요소와 달리 하위 구성 요소는 부모와 동시에 코드가 생성됩니다. 즉, 부모로부터 상속 된 것에 대해 명시 할 필요가 없습니다. 대거는 상위 그래프에서 사용할 수있는 것을 추론 할 수 있습니다. 그러나 하위 구성 요소는 상위 구성 요소의 인터페이스에서 참조가 필요합니다. 그렇지 않으면 생성되지 않습니다. (이 참조는 하위 구성 요소를 반환하는 팩토리 메서드이거나 하위 구성 요소 작성기를 반환하는 메서드이거나 구성 요소의 다른 개체 또는 멤버가 주입하는 전이 주입 일 수 있습니다.) 따라서 하위 구성 요소의 경우에도 빈 구성 요소는 여전히 있습니다 편치 않은.

관련 문제