因此,我在我的Java项目(Google Guice)中实现了一个依赖注入框架,一切都很好,我喜欢它,但是有一个小问题。
我想为我的主项目的类创建一个静态实例(在其中实例化依赖项,等等)。但是我不知道使用Guice实例化它的任何方法,我无法手动实例化它,因为我在它的构造函数中使用了DI(构造函数中有对象),这意味着我无法访问类的非静态变量以实例化该类。
我尝试使用提供程序,但是我真的不明白在哪里绑定它,因为我不想为主类提供接口(如果需要的话)。

最佳答案

如果您想将类的静态实例与依赖项注入混合使用,则您可能会错过依赖项注入的要点:您可以简单地注入类的实例。

如果要为注射器提供一个类的单个实例,请在@Singleton范围内绑定它:

bind(YourClass.class).in(Singleton.class);


在模块的configure()方法中,或

@Provides @Singleton YourClass provideYourClassInstance() {
  // ...
}


在您的模块中,或

@Singleton class YourClass {
  // ...
}


在实际的类声明中。

然后像其他任何实例一样注入该实例:

class SomeOtherClass {
  @Inject SomeOtherClass(YourClass instance) {
    // ... Do something with instance, like assign it to a field.
  }
}


关键是SomeOtherClass不需要了解instance的生命周期:这是否是单例实例,还是使用它的每个类都有自己的实例,这无关紧要。

10-08 15:16