为什么在创建类的对象时需要提供注入的参数?

问题描述 投票:0回答:1

我对使用Google Guice的依赖注入有疑问。

我有一个特点很少实现的方法

trait ATrait {
    def someMethodA(parameters: ArgType) = {
     //code
    }

    def someMethodB(parameters: ArgType) = {
     //code
    }
}    
object A extends ATrait

现在我有一个B级,我需要Atrait的方法。所以我注射了它。

class B @Inject(a: ATrait) {
  //code
}

我还在Guice模块类中给出了绑定。

class GuiceModule extends AbstractModule {
  override def configure(): Unit = {
    bind[ATrait].toInstance(A)
  }
}

现在,当我创建一个B类对象时,

val b = new B()

它不会让我这样做,所以我的问题是如果我必须手动传递ATrait的对象。 Google Guice Injection有什么用?

我可能犯了一些错误,因为我正在学习这个。如果我没有正确理解,请指导我。

提前致谢。

scala dependency-injection guice
1个回答
3
投票

Guice不会以这种方式工作。如果你想要一个新的根对象,你需要向Guice索取一个新的实例。

val injector = Guice.createInjector(new GuiceModule())

val a:ATrait = injector.getInstance(classOf[ATrait])
© www.soinside.com 2019 - 2024. All rights reserved.