使用对象 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
并重新加载您的项目
我们正在从 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
并重新加载您的项目