Play Framework 2.4在Scala模板中使用注入变量

时间:2015-10-04 14:44:25

标签: scala playframework playframework-2.4

我想在我的网页的菜单栏中显示数据库中的一些数据。为了获取数据,我有一个数据访问对象(DAO),通常使用Guice注入创建。

如何在Scala模板中使用这样的(注入的)对象?

我可以将它作为参数传递给模板,但我必须在每个页面上执行此操作(因为它应该显示在菜单栏中)。我正在寻找另一种解决方案,我不必在任何地方通过它。目前我在模板中创建一个新对象,无论何时渲染它(这使我的代码更清晰但性能更差)。

1 个答案:

答案 0 :(得分:3)

你可以在没有太多努力的情况下对此进行伪造。

首先,创建一个Scala对象,提供对DAO的访问(这可以包含任意数量的内容,只需重复顶级对象和Implicits对象中的模式)。

package com.example.stuff

object ViewAccessPoint {
  private[stuff] val myDaoCache = Application.instanceCache[MyDao]

  object Implicits {
    implicit def myDao(implicit application: Application): MyDao = myDaoCache(application)
  }
}

在您的视图中,您可以将Implicits对象导入模板并获取Guice创建的DAO。

@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current

myDao.whatever()

这适用于Java和Scala项目。

你可以在这里看到这个:

另外,我会考虑您是否真的希望在模板层中进行数据访问。

相关问题