播放:如何在我的 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)
            }
        }
}