2012-07-24 4 views
0

나는이 분야 있습니다Guice에서이 유형을 어떻게 바인딩합니까?

@Inject(optional=true) 
@Named(NAMED_ERROR_HANDLER) 
private PolymorphicDispatcher.ErrorHandler<IScope> errorHandler = new PolymorphicDispatcher.NullErrorHandler<IScope>(); 

을 나는 기본 바인딩 (NullErrorHandler)를 오버라이드 (override) 할 필요가있다. 어떻게해야합니까?

+0

Guice를 의미합니까? –

+0

Xtext에서'PolymorphicDispatcher'가 비명을 지르고 있습니다. 권리? –

+0

@ 루이스 와서 만 : 고정 태그. –

답변

1

내가 PolymorphicDispatcher.ErrorHandler 보드에 아들을 가지고 있지 않지만,이 작업해야 바인딩이 같은 무언가로

bind(new TypeLiteral<PolymorphicDispatcher.ErrorHandler<IScope>>(){}) 
    .annotatedWith(Names.named(NAMED_ERROR_HANDLER)) 
    .to(MyImpl.class); 

MyImpl을 :

public class MyImpl implements PolymorphicDispatcher.ErrorHandler<IScope> { 
    // methods from interface 
} 

기본 원리는 here 설명 TypeLiteral을 검색 할 때 (죄송합니다, 해당 섹션 근처에 HTML-ID 또는 앵커 없음).

+0

감사합니다. 내 코드에서 Types.newParameterizedType (PolymorphicDispatcher.class, PolymorphicDispatcher.ErrorHandler.class, IScope.class)'을 사용했지만 일치하지 않습니다. 왜 그런가? –

+0

귀하의 의견 유형이 (일부 약어를 사용하여)'PD '와 일치하지만'PD.EH '이 필요합니다. 따라서 첫 번째 인수를 삭제해도 작동합니다. 'EH'는 클래스가 아니라 내부 클래스라는 것을 주목하십시오. 그것은 단지 인터페이스 일뿐입니다. 그 시나리오에서'PD'는 다른 네임 스페이스 일 뿐이지 만'EH'의 _generic_ 타입에 속하지 않습니다. –

관련 문제