将现有的 Play 静态路由与注入'compile-time'依赖项的新控制器实例混合在一起



我有一个现有的应用程序,它有一堆2.4之前的静态对象风格的控制器,我现在不想碰它们。

同时,我想添加一些新的功能和控制器,但在新代码中,我想使用Play-people称之为"编译时"注入的范例。

为了达到这个效果,我已经按照文档设置了一些基本的布线:

class MyApplicationLoader extends ApplicationLoader {
  def load(context: Context) = {
    Logger.info("initializing the application in play 2.4-style")
    new MyComponents(context).application
  }
}
class MyComponents(context: Context) extends BuiltInComponentsFromContext(context) {
  lazy val router: play.api.routing.Router = ???
  lazy val someNewController = new SomeNewController(new SomeComponent())
}

问题出在路由器的配置/实现上。

我希望它取所有生成的路由(从已有的路由文件),并添加由SomeNewController处理的新路由。

这是我的理解,我不能添加SomeNewController与@syntax的路由文件,因为这假设我将使用什么Play调用'运行时DI'使用Guice,我不想这样做。

我如何保留我现有的路由,并为someNewController实例添加新的路由,基本上合并它们?

我想我必须实例化一个play.api.routing.Router,并用生成的router.Routes对象中的路由填充它,并为SomeNewController添加一个条目,但API对我来说并不明显。

沉默(就回应而言)表明了我已经担心的事情:我处于危险之中。

虽然混合和匹配路线在理论上是可能的,但它需要一些与Play的复杂性密切相关的巫术,所以我不会向任何人推荐它。

我现在所做的,只是将我所有的控制器和它们的合作者迁移到"编译时DI"。这是一项相当大的任务,而我被迫这么做的事实表明了Play提供的升级路径的实用性。

最新更新