我需要获取请求标头值并将其注入构造函数,而类由Guice实例化。似乎Guice模块无法访问http.context!这样做的正确方法是什么?
@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上下文。 当我做上述事情时!?
答案 0 :(得分: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)
}