【发布时间】:2016-10-06 11:45:05
【问题描述】:
我正在尝试处理 Scala 模板中的依赖注入对象(我使用的是基于 Java 的 Play 2.5)。
我有一个模板系统,其中我的布局模板具有最少的 HTML 基础,并且几乎所有其他构建 HTML 正文的其他 HTML 模板都包含该模板。
在模板中,我还包括带有“注销”按钮的顶部菜单,并且还有一个当前登录用户的名称。
我有一个名为 LocalAuthenticator 的单例对象,它传递包含用户名的用户对象。到目前为止,我一直在使用像这样的辅助 Scala 对象进行依赖注入
object LocalAuthenticator {
private val cache = Application.instanceCache[core.security.LocalAuthenticator]
object Implicits {
implicit def localAuth(implicit application: Application): core.security.LocalAuthenticator = cache(application) }
}
然后我可以使用这个构造从模板访问 LocalAuthenticator
@import play.api.Play.current
@import scala.LocalAuthenticator.Implicits._
Logged in user is: @localAuth.getCurrentUser().name
这在 2.4 中有效,但是 2.5 抱怨 play.api.Play.current 因使用静态上下文而被弃用。
我知道正确的方法是将 LocalAuthenticator 注入 Controller 并将其传递给模板,但是该对象应该存在于所有模板中,并且将其注入每个控制器非常烦人。
有没有办法直接将单例类注入到模板中?
我试图在辅助对象中获取注入器以获取单例,但这只有在我有 Play Application 对象时才能完成。这只能使用 DI 来检索。所以我在兜圈子:-)
【问题讨论】:
标签: java scala playframework dependency-injection playframework-2.5