代码之家  ›  专栏  ›  技术社区  ›  Mahesh Chand

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

  •  0
  • Mahesh Chand  · 技术社区  · 6 年前

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

    我有一个特点,它几乎没有实现的方法

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

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

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

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

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

    val b = new B()
    

    它不允许我这样做,所以我的问题是我是否必须手动传递它的对象。googleguice注入有什么用?

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

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Sebastian Celestino    6 年前

    Guice不是那样工作的。如果您想要一个新的根对象,您需要向Guice请求一个新实例。

    val injector = Guice.createInjector(new GuiceModule())
    
    val a:ATrait = injector.getInstance(classOf[ATrait])