2017-04-04 84 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中有一個會話上下文,但在播放中沒有會話。看[這] [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) 
}