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