我有一个现有的应用程序,它有一堆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提供的升级路径的实用性。