我使用依賴注入Scala中播放2.5斯卡拉玩2.5.X - 依賴注入與性狀
我讀DI引導和建立我的控制器有緩存的注入:
class EventController @Inject()(db: Database, cache: CacheApi)
extends Controller with Authentication {
...
}
認證是我爲了指定哪些端點絕對需要用戶而做出的特性。這是定義:
class UserRequest[A](
val uid: Option[Long], request: Request[A]
) extends WrappedRequest[A](request)
trait Authentication { self: Controller =>
var cache: CacheApi = null
...
def translateToken(token: String): Option[Long] = {
val uidstr = cache.get[Long](token)
if(uidstr.isDefined){
return Some(uidstr.get)
} else {
return None
}
}
object AuthenticatedAction extends ActionBuilder[UserRequest] {
def invokeBlock[A](request: Request[A], block: (UserRequest[A]) => Future[Result]) = {
var uid: Option[Long] = None;
val token = request.session.get("token");
if(token.isDefined){
// verify session is genuine
uid = translateToken(token.get)
if(!uid.isDefined){
// token is invalid or outdated. reset the session
request.session - "token"
}
}
block(new UserRequest[A](uid, request) )
}
}
...
}
我有我的build.sbt中的緩存庫。
每當我試圖在這個控制器上調用一個動作時,我在cache.get上得到一個空指針。我如何讓注入不爲空,以及如何確保注入的值永遠不會爲空?
請在性狀緩存'def',然後緩存在控制器中的'val'(如josephpconley指出)。 – rethab