使用对象 SomeController 扩展 Play 框架 2.5 中的控制器

Using object SomeController extends Controller in Play framework 2.5 instead

我们正在从 play 2 升级到 play 2.5.5。4.x。我们有一个 相当多的控制器是对象,像这样:

object TranslationsController extends Controller { ... }

但是,自从切换到 2.5 后,我们现在遇到了数百个这样的错误 (这是一个相当大的项目):

type TranslationsController is not a member of package controllers

有没有办法仍然允许 some/most 我们的控制器成为对象并且 不是 class?我意识到这与依赖注入有关。 但是相当大比例的控制器, 没有依赖项。

当然,我们可以像这样重写它只是为了让它编译:

class TranslationsController @Inject () extends Controller { ... }

但这真的毫无意义吗??不可变的 class/object 参数,应该是一个对象。这就像 case class None()case object None。当然,后者在任何情况下都应该是首选。

重要的是我们不能只用字符串替换对象->class 要么,因为我们有很多(~1000)假设这些的测试 控制器成为对象。为了让它与 class 一起工作,我们必须 重写所有这些测试,首先做一个 val controller = new TranslationsController,这是很多工作(还有大量的工作 样板)。

如果有某种方法仍然可以使用对象,我将不胜感激。是 在 .routes 文件中有一些语法,或者有一个简单的 解决方法?我的意思是,一旦对这些控制器有依赖性,我们就会 使它们成为 classes,但是一次性对 100 个控制器执行此操作而无需任何 好处是很痛苦。

如果您告诉 Play 使用旧的路线生成器,您应该能够保留这些控制器。在你的 build.sbt 中输入:

routesGenerator := StaticRoutesGenerator

并重新加载您的项目