と依存性の注入は2.5Scalaは2.5.Xを再生する - 私はScalaで依存性注入を使用していた形質
を再生する私は、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にキャッシュlibを持っています。
このコントローラーでアクションを呼び出そうとするたびに、私はcache.getにヌルポインターを取得します。インジェクションをnullにしないようにするにはどうすればいいですか?インジェクションされた値が決してnullにならないようにするにはどうすればよいですか?
形質キャッシュ 'def'コントローラにおけるキャッシュ(josephpconleyが指摘したように)' val'を作るを使用しているべきである。例えば
、。 – rethab