Playframework的Session如何注入Action?

时间:2014-10-29 09:04:53

标签: scala slick playframework-2.3 implicits

我正在尝试编写自己的操作并隐式传入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

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

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

完全糊涂了! = S

1 个答案:

答案 0 :(得分:1)

经过一番艰苦的挖掘后,我找到了解决自己问题的方法。

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

implicit def request2session(implicit request: RequestHeader): Session

PlayFramework,你很聪明!