将现有Play静态路由与新的“编译时”依赖注入控制器实例混合

时间:2016-08-14 11:39:23

标签: scala playframework playframework-2.4

我有一个现有的应用程序,它有一堆2.4之前的静态对象式控制器,我现在不想触摸它。

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

为此,我根据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())

}

问题在于配置/实施路由器。

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

据我所知,我无法使用@syntax将SomeNewController添加到路径文件中,因为这假设我将使用Guice使用Play调用'运行时DI',我不想要要做。

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

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

1 个答案:

答案 0 :(得分:0)

沉默(就回应而言)表明了我已经害怕的事情:我不在身边。

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

我现在所做的只是将我的所有控制器及其协作者迁移到编译时DI'。这是一项相当大的工作,我被迫这样做的事实表明了Play提供的升级路径的实用性。