播放:如何在我的 ActionTransformer 中检索缓存
Play : How to retrieve cache in my ActionTransformer
我正在使用 Play 2.4 Scala。我将 Action 组合与 ActionTransformer
结合使用,以便在我的 CustomAction
.
中提供一个 User 实例
我希望我的 ActionTransformer
从缓存中检索内容。 CacheApi
实例只能通过依赖注入来检索,而我的 ActionTransformer
是一个对象(没有 DI)。
我是否应该在我的所有控制器中声明一个 @Inject() (cache...)
然后在我的 def index = CustomAction(cache) {...}
函数中明确传递这个缓存实例?
有更好的方法吗?
可以直接调用注入器从guice获取实例:
val cache = Play.current.injector.instanceOf(classOf[CacheApi])
请注意,这涉及到 play 的 gobal 状态。你可能知道这将在 Play 3.0 中被弃用,所以谨慎使用它可能是个好主意。如果有人找到更好的方法,我也会感兴趣...
我将其用作服务(外部控制器):
@Singleton class ActionTransformer @Inject() (private val cache: CacheApi) {
// Do what you want with the cache instance
def getMyCachedClassFromCache : MyCachedClass = {
cache.getOrElse[MyCachedClass](KEY_CACHE) {
val myNewCachedClass = MyCachedClass()
cache.set(KEY_CACHE, myNewCachedClass)
}
}
}
我正在使用 Play 2.4 Scala。我将 Action 组合与 ActionTransformer
结合使用,以便在我的 CustomAction
.
我希望我的 ActionTransformer
从缓存中检索内容。 CacheApi
实例只能通过依赖注入来检索,而我的 ActionTransformer
是一个对象(没有 DI)。
我是否应该在我的所有控制器中声明一个 @Inject() (cache...)
然后在我的 def index = CustomAction(cache) {...}
函数中明确传递这个缓存实例?
有更好的方法吗?
可以直接调用注入器从guice获取实例:
val cache = Play.current.injector.instanceOf(classOf[CacheApi])
请注意,这涉及到 play 的 gobal 状态。你可能知道这将在 Play 3.0 中被弃用,所以谨慎使用它可能是个好主意。如果有人找到更好的方法,我也会感兴趣...
我将其用作服务(外部控制器):
@Singleton class ActionTransformer @Inject() (private val cache: CacheApi) {
// Do what you want with the cache instance
def getMyCachedClassFromCache : MyCachedClass = {
cache.getOrElse[MyCachedClass](KEY_CACHE) {
val myNewCachedClass = MyCachedClass()
cache.set(KEY_CACHE, myNewCachedClass)
}
}
}