【问题标题】:Scala Play Framework - controller as class or singletonScala Play Framework - 控制器作为类或单例
【发布时间】:2015-09-30 05:46:43
【问题描述】:

我正在为 Scala 尝试 Play 2.4.2,但我不清楚控制器应该定义为类还是单例。文档状态:

控制器只不过是一个生成的单例对象 行动价值观。

但是代码示例显示:

class Application extends Controller { ... }

更复杂的是,如果我定义了一个类,intellij 会给我一个警告:

但是,如果我使用单例,我会收到编译错误(但没有警告):

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller { ... }

错误:(6, -1) Play 2 编译器: /Users/Toby/IdeaProjects/play-scala/conf/routes:6:类型应用程序是 不是包控制器的成员

哪种方法是正确的?

【问题讨论】:

  • 首先检查控制器是否在所需的包中,然后将其定义为单例object Application extends Controller,或者如果需要依赖注入则定义为类。

标签: scala playframework playframework-2.4


【解决方案1】:

如果您使用静态路由器,您的控制器应该是对象。静态是 Play 2.4 中的默认路由器,与 Play 2.3 及之前的行为相同。

如果您使用 Play 2.4 中新增的注入路由器,您可以将控制器转换为类。您需要在build.sbt 中启用注入路由器:

routesGenerator := InjectedRoutesGenerator

更新:注入的路由器现在是 Play 2.5 中的默认设置

【讨论】:

  • 谢谢,我注意到我的 sbt 包含 routesGenerator := InjectedRoutesGenerator 这很奇怪,因为我没有添加它,我认为默认是旧的静态方法。这可以解释为什么我的课程有效但单身人士没有
  • 他们推荐使用注入的路由器。如果您从模板生成一个新项目,您可能会得到这样的结果
  • 对于 IDEA 代码辅助/内联编译错误,请参阅问题 youtrack.jetbrains.com/issue/SCL-8812
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多