为什么在创建 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])