我有一个现有的应用程序,它有一堆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对我来说并不是很明显。
答案 0 :(得分:0)
沉默(就回应而言)表明了我已经害怕的事情:我不在身边。
虽然在理论上混合和匹配路线可能是可能的,但是需要一些巫术与Play的复杂性密切相关,我不会向任何人推荐它。
我现在所做的只是将我的所有控制器及其协作者迁移到编译时DI'。这是一项相当大的工作,我被迫这样做的事实表明了Play提供的升级路径的实用性。