想象一下 B 类如下:
class B @Inject() (wsClient: WSClient) {
...
}
然后在另一个类A中,我需要实例化B:
class A {
val b = new B()
}
它会提示说我没有在构造函数中指定 wsClient。 解决此问题的一种方法是修改 A :
class A @Inject() (wsClient: WSClient) {
val b = new B(wsClient)
}
我也可以在我的 B 类中添加一个隐式。但在这两种情况下,对我来说,像这样发送依赖项似乎是非常错误的......
我怎样才能以更优雅的方式做到这一点?
最佳答案
进行 DI 的全部目的是拥有 inversion of control 。您的绑定(bind)决定如何构建应用程序,而不是应用程序中的类负责自己的控制流。
行 val b = new B(wsClient)
违反了这一原则,因为类负责知道它应该如何构成自身,而不是 DI 框架负责。
class B @Inject() (ws: WSClient){}
class A @Inject() (b: B) // extends B
{}
正如 @zoltan 提到的,将 B 注入(inject) A 将是解决问题的正确方法。
关于java - 在 Play (Scala) 中使用 Guice 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36890002/