(播放 2.4)特征中的依赖注入?

(Play 2.4) Dependency injection in a trait?

在 play 2.4 中,是否可以在特征中使用依赖注入?

有例子吗?

谢谢。

我在这里谈论使用 Guice 的运行时 DI,因为它是 Play 使用的默认方法。其他 DI 方法或框架在这里可能有所不同。

无法将依赖项注入特征,因为特征不可实例化。特征没有构造函数来定义依赖关系。

在 Play 中,只要 Application 特性在范围内,您就可以直接使用注入器。但这在生产代码中不被认为是好的做法。在测试代​​码中,这将是一个选项。

class MySpec extends PlaySpecification {
  "My test" should {
    "Use the injector" in new WithApplication extends Context {
      val messages = Messages(Lang("en-US"), messagesApi)
    } 
  }

  trait Context extends Scope {
    self: WithApplication =>

    val messagesApi = app.injector.instanceOf[MessagesApi]
  }
}