0

我正在尝试编写自己的操作并隐式传入 DatabaseSession。但是,充其量我可以在我的控制器中做这样的事情。

def index = MyAction { implicit myRequest =>
  implicit val dbss = myRequest.databaseSession
  aClass.someMethod() // requires an implicit DatabaseSession
}

在 playframework 中,您可以像这样访问会话:

def index = Action { implicit request =>
  val someOption = session.get("something")
  // OR
  aClass.doSomething() // requires an implicit Session
}

在这里,我们可以看到,当只有请求作为隐式传入时,您可以直接访问会话。那么会话是从哪里来的呢?我怎么能像 Session 一样传入我的 DatabaseSession?这样我就不必写了:

implicit val dbss = myRequest.databaseSession

我知道这是可能的,因为 slick 能够隐式传递他们的 dbSession。但我似乎也无法弄清楚他们是如何做到的。

https://github.com/playframework/play-slick/blob/master/code/src/main/scala/play/api/db/slick/DBAction.scala

完全糊涂了!=S

4

1 回答 1

1

经过一番努力,我找到了自己问题的解决方案。

秘密在于Controller,它有一个隐含的def:

implicit def request2session(implicit request: RequestHeader): Session

PlayFramework,你很聪明!

于 2014-10-29T11:55:57.527 回答