2017-04-04 47 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) 
}