2017-12-15 24 views
0

내 클래스를 바인딩 (그 XY를 부르 자) 모두 (상대적으로) CPU 집약적 인 작업 (XY에 대해 서로 다른 구문) 특정 구문에 대한 파서를 구축 할 Parser 인터페이스를 구현.동일한 인터페이스를 두 번 (Guice)

이제 XY의 종속성 (상위 수준) 파서 P의 생성자에 (Guice와 함께) 삽입하고 싶습니다.

class P implements Parser { 

    @Inject 
    public P(Parser x, Parser y) { 
     // ... 
    } 

} 

가 어떻게 Guice는 XY을 받아야한다 P의 두 인수하는 차별화 할 수 있습니다 : P 모두 인수 유형 Parser이어야한다?

이해 하시겠지만 XY에는 @Singleton의 주석을 달아야합니다 (단,이 메모는 질문과 관련없는 것처럼 보입니다).

답변

1

는이 같은 Named 주석을 사용해야합니다

Guice의 설정에
class P implements Parser { 

    @Inject 
    public P(@Named("x") Parser x, @Named("y") Parser y) { 
     // ... 
    } 

} 

자신의 구현 클래스에 모든라는 이름의 변수를 할당

bind(Parser.class) 
     .annotatedWith(Names.named("x")) 
     .to(ParserXImplementation.class); 

bind(Parser.class) 
     .annotatedWith(Names.named("y")) 
     .to(ParserYImplementation.class);