了解Play 2.4依赖注入

lin*_*ips 6 java dependency-injection guice playframework playframework-2.4

我有一些问题需要了解如何在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

[2] https://github.com/playframework/play-mailer

bra*_*vo2 1

我相信,绑定是通过添加到play.modules.enabled 的MailerModule进行的。MailerModule为 MailerClient 提供 Guice 绑定。

play {
  modules {
    enabled += "play.api.libs.mailer.MailerModule"
  }
Run Code Online (Sandbox Code Playgroud)

为了让 Guice 将 MailerClient 注入到您的对象中,应该通过 Guice 创建它。例如,如果您想@Inject MailerClient在 Controller 中使用或将 Service 注入到控制器中,则需要通过 Guice 注入您的控制器。在 Play 2.4 中推荐的方法是将以下内容添加到您的 build.sbt 中:

routesGenerator := InjectedRoutesGenerator
Run Code Online (Sandbox Code Playgroud)