2013-06-17 1 views
0

보조 주입을 사용하여 clientfactory에서 가져온 여러 개의 발표자 위젯이 있습니다.enum 매개 변수가있는 보조 주입

public interface FieldFactory { 

    TextboxPresenterWidget createTextBoxWidget(Field field); 
    BooleanPresenterWidget createBooleanWidget(Field field); 
     ... 
} 

이 현재 잘 작동하지만 내가하고 싶은 것은 특별히 불러 내고 대신 얻을 수있는 주입의 한 부분으로 그것의 유형에 통과 할 수없이 내가 원하는 위젯을 만들 수있다 올바른 PresenterWidget.

각 'Field'개체는 어떤 유형의 열거 형 속성을가집니다 ... 방법이 있다면 어떻게 처리 할 것인지 궁금합니다.

바람직하게는 내 공장은 더 같을 것이다 : 모든 입력에 대한

... 
for(Field field : fields) { 
    addToSlot(SLOT_NAME, fieldFactory.create(field, field.getType())); 
} 
... 

감사합니다, 그것은 많이 감사합니다 :

public interface FieldFactory { 

    TextboxPresenterWidget create(Field field, FieldType type); 
    BooleanPresenterWidget create(Field field, FieldType type); 
     ... 
} 

이 내 IMPL 코드가 더처럼 만들 것입니다!

+1

진 2.1 결합 다 지원하는 것은, 당신이 열거 떨어져 맵을 생성하고 사용할 수있다 - 자세한 내용 –

+0

에 대한 http://code.google.com/p/google-guice/wiki/Multibindings 참조 고마워, 나는 이것을 조사 할 것이다. – fatkid

답변

0

열거 형 값에 대한 어쨌든 어쨌든 값을 지정해야하고 손으로 코딩 한 것보다는 생성 한 것을 선호 할 수 있지만 GIN은 처리하지 않을 것이며 아마 스위치 코드 자체보다 더 많은 (또는 최소한 많은) 구성 코드가 필요합니다.

어시스턴트 인젝션을 지원하는 손으로 직접 작성한 공장은 어떨까요?

public class FieldFactory { 
    @Inject AssistedFieldFactory factory; 

    public PresenterWidget create(Field field) { 
    switch (field.getType()) { 
    case TEXTBOX: 
     return factory.createTextBoxWidget(field); 
    case BOOLEAN: 
     return factory.createBooleanWidget(field); 
    default: 
     throw new IllegalArgumentException(); 
    } 
    } 
} 
+0

예. 정상적으로 작동합니다. 내가 현재하고있는 것과 매우 흡사하다. 나는 그것의 공장으로 그것을 꺼내지 않았다. 그것은 더 깨끗할 것이다. 감사합니다. – fatkid

관련 문제