因此,我在我的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
的生命周期:这是否是单例实例,还是使用它的每个类都有自己的实例,这无关紧要。