为什么在创建 class 的对象时需要提供注入参数?
Why there is need to provide injected arguments while creating object of class?
我对使用 Google Guice 进行依赖注入有疑问。
我有一个几乎没有实现方法的特性
trait ATrait {
def someMethodA(parameters: ArgType) = {
//code
}
def someMethodB(parameters: ArgType) = {
//code
}
}
object A extends ATrait
现在我有一个 class B,我需要 Atrait 的方法。所以我注射了。
class B @Inject(a: ATrait) {
//code
}
我也在Guice模块中给出了绑定class。
class GuiceModule extends AbstractModule {
override def configure(): Unit = {
bind[ATrait].toInstance(A)
}
}
现在,当我创建 class B 的对象时,
val b = new B()
它不会让我这样做,所以我的问题是我是否必须手动传递 ATrait 对象。 Google Guice注入有什么用?
我可能犯了一些错误,因为我正在学习这个。如果我有什么不正确的地方,请指导我。
提前致谢。
Guice 不是这样工作的。如果你想要一个新的根对象,你需要向 Guice 询问一个新的实例。
val injector = Guice.createInjector(new GuiceModule())
val a:ATrait = injector.getInstance(classOf[ATrait])
我对使用 Google Guice 进行依赖注入有疑问。
我有一个几乎没有实现方法的特性
trait ATrait {
def someMethodA(parameters: ArgType) = {
//code
}
def someMethodB(parameters: ArgType) = {
//code
}
}
object A extends ATrait
现在我有一个 class B,我需要 Atrait 的方法。所以我注射了。
class B @Inject(a: ATrait) {
//code
}
我也在Guice模块中给出了绑定class。
class GuiceModule extends AbstractModule {
override def configure(): Unit = {
bind[ATrait].toInstance(A)
}
}
现在,当我创建 class B 的对象时,
val b = new B()
它不会让我这样做,所以我的问题是我是否必须手动传递 ATrait 对象。 Google Guice注入有什么用?
我可能犯了一些错误,因为我正在学习这个。如果我有什么不正确的地方,请指导我。
提前致谢。
Guice 不是这样工作的。如果你想要一个新的根对象,你需要向 Guice 询问一个新的实例。
val injector = Guice.createInjector(new GuiceModule())
val a:ATrait = injector.getInstance(classOf[ATrait])