这不是阻塞问题,但我想了解Play如何更好地处理控制器注入。
在Play document about Routing in 2.4中,据说:
Play支持生成两种类型的路由器,一种是依赖注入路由器,另一种是静态路由器。默认是静态路由器,但如果您使用Play种子激活器模板创建了一个新的Play应用程序,您的项目将在build.sbt中包含以下配置,告诉它使用注入的路由器:
routesGenerator:= InjectedRoutesGenerator
Play文档中的代码示例假定您使用的是注入路由生成器。如果您不使用它,则可以通过为路由的控制器调用部分添加@符号前缀,或者将每个控制器声明为对象而不是类来简单地调整静态路由生成器的代码示例。
所以,根据我的理解,routesGenerator := InjectedRoutesGenerator
中的build.sbt
,如果我使用@
前缀进行控制器调用,则与将控制器设为单身{{1}相同}。这违背了我已经将我的控制器声明为object
并且有一些注入(使用class
)这一事实,并且我将所有控制器调用作为@Inject
的前缀,以便IntelliJ不报告错误。
那么,@
真正做我的控制器调用是什么?
答案 0 :(得分:2)
@
是StaticRoutesGenerator
的选项,它与Injected
无关。
当您按照InjectedRoutesGenerator
的推荐方式操作时,您的控制器必须是一个类,其中将注入依赖项(如果使用运行时DI则自动注入,或者如果使用编译则手动注入-time DI)。在路径文件中,您只需引用没有@
的类。
如果选择StaticRoutesGenerator
,路由器将遵循与Play 2.3及更低版本相同的行为。控制器是默认对象,您可以添加@
来引用类。
我希望这能解决您的疑虑。