2013-08-26 2 views
0

일반 유형과 구별되는 다양한 개체 목록을 주입하고 싶습니다.Guice가 일반 목록을 삽입

표시하려는 ContentPanels (Jpanel의 하위 유형) 목록을 허용하는 MainView가 있습니다.

그래서 난이

@Inject 
MainView(List<ContentPanel<?>> contentPanel){ 
    ... 
} 

컨텐츠 패널들이 제네릭 형식에 차이가 있으므로

내가

bind(new TypeLiteral<AbstractContentPanel<Book>>(){}) 
     .to(new TypeLiteral<BookContentPanel<Book>>(){}) 
     .in(Singleton.class); 
로를 결합하는 시도 등 영화에 대한 책 하나 하나가

bind(new TypeLiteral<AbstractContentPanel<Movie>>(){}) 
      .to(new TypeLiteral<BookContentPanel<Movie>>(){}) 
      .in(Singleton.class); 
,

어떻게 목록을 만들어 내 MainView에 삽입 할 수 있습니까?

답변

4

모든 바인딩을에 넣으려면 그렇게 할 수 없습니다.

bind(new TypeLiteral<List<String>>() {}) 
    .toInstance(new ArrayList<String>()); 

을하지만,이 경우 귀하의 목록은 (A Provider를 통해 또는 제공) 사전에 알고 있어야합니다 : 당신이 목록을 삽입하려면 다음과 같이 직접 결합한다.

시퀀스를 통해 바인딩에 액세스하려면 multibinding extension을 사용해야합니다.

Multibinder<ContentPanel<?>> multibinder = Multibinder.newSetBinder(binder(), new TypeLiteral<ContentPanel<?>>() {}); 
multibinder.addBinding().to(YourContentPanelImpl1.class); 
multibinder.addBinding().to(YourContentPanelImpl2.class); 
// and so on 

을 그리고 당신은 Set 주입 할 수 있습니다 :이 경우 코드는 다음과 같이 할 수

@Inject 
MainView(Set<ContentPanel<?>> contents) { 
    ... 
} 
관련 문제