2017-04-04 1 views
1

Guice가 클래스를 인스턴스화하는 동안 요청 헤더 값을 가져 와서 생성자에 주입해야합니다. Guice 모듈이 http.context에 액세스 할 수없는 것 같습니다! 이 작업을 수행하는 올바른 방법은 무엇입니까?Guice 모듈에서 http 요청 헤더 값 가져 오기

@Provides 
protected class CustomerProvider @Inject()(dataClient: DataClient) extends Provider[CustomerRepository] { 
    override def get(): CustomerRepository = { 
    implicit val productType:String = Option(Context.Implicit.request.getHeader("abc")).getOrElse("xyz") 
    val session = dataClient.session(productType) 
    new CustomerRepository(session) 
    } 

오류 메시지가 표시됩니다. 여기에서 사용할 수있는 HTTP 컨텍스트가 없습니다. 위의 작업을 수행 할 때!?

답변

1

나는 그렇게 생각하지 않습니다. Guice에는 세션 컨텍스트가 있지만 세션 중에는 세션이 없습니다. [this] [1. 따라서 메서드 실행시 특정 컨텍스트를 사용할 수 없습니다. 당신이 할 수있는 일은 무국적 싱글 톤을 만들고이 메소드가 요청 컨텍스트를 받아들이도록하는 것입니다. 예 :

@Provides 
protected class CustomerProvider @Inject()(dataClient: DataClient) 
    extends Provider[CustomerRepository] { 
    override def get(): CustomerRepository = { 
     new CustomerRepository() 
    } 
} 
class CustomerRepository @Inject()(collaborator: CCC) { 
    def doSomething(param1, param2)(implicit request: RequestHeader) 
}