我有一些问题需要了解如何在Play 2.4中应用依赖注入的新功能。我熟悉Guice并在Play文档中错过了解实际绑定发生的方式和时间。我阅读了官方文档[1],并尝试使用最新的Play Mailer [2]作为示例。 Play Mailer示例使用任意类,并使用MailerClient
注释@inject
属性。当我尝试使用此类的对象时,属性为null
,至少在调试时。那么,我必须在何时何地进行实际注射?我对@singleton
注释有同样的问题。它只是解释了如何注释它,而不是如何获取对象。我是否必须直接使用Guice,或者它是如何集成的?
[1] https://www.playframework.com/documentation/2.4.x/JavaDependencyInjection
答案 0 :(得分:1)
我相信,绑定是通过添加到MailerModule的play.modules.enabled来实现的。 MailerModule为MailerClient提供Guice绑定。
play {
modules {
enabled += "play.api.libs.mailer.MailerModule"
}
为了让Guice将MailerClient注入你的对象,它应该通过Guice创建。例如,如果您想在控制器中使用@Inject MailerClient
或注入控制器的服务,则需要通过Guice注入控制器。 Recommended approach for this in Play 2.4正在向build.sbt添加以下内容:
routesGenerator := InjectedRoutesGenerator