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

Mixing existing Play static routes with new 'compile-time' dependency-injected controller instances

我有一个现有的应用程序,它有一堆 pre-2.4 静态对象样式的控制器,我现在不想触及。

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

为此,我根据 the documentation:

设置了一些基本接线
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())

}

问题出在 configuring/implementing 路由器上。

我希望它获取所有生成的路由(来自预先存在的路由文件)并添加由 SomeNewController 处理的新路由。

据我了解,我无法使用@syntax 将 SomeNewController 添加到路由文件中,因为这假设我将使用 Play 调用的 'runtime DI' 使用 Guice,而我不这样做不想做。

如何保留我现有的路线并为 someNewController 实例添加新路线,实质上是合并它们?

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

沉默(就回应而言)表明我已经担心的事情:我处于困境。

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

我现在所做的只是将我所有的控制器及其协作者迁移到 'compile-time DI'。这是一项艰巨的任务,我被迫这样做的事实表明了 Play 提供的升级路径的实用性。