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

时间:2015-08-10 15:20:28

标签: scala playframework dependency-injection guice

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

有什么例子吗?

感谢。

1 个答案:

答案 0 :(得分:6)

我在这里谈论与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]
  }
}