我需要获取请求标头值并将其注入构造函数,而类由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 上下文。当我做上述操作时!?
我认为你不能这样做。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)
}