所以我在我的 Java 项目 (Google Guice) 中实现了一个依赖注入(inject)框架,一切都很好,我喜欢它,但有一个小问题; 我想创建一个我的主项目类的 static 实例(它在其中实例化依赖项等)。但是我不知道使用 Guice 实例化它的任何方法,我无法手动实例化它,因为我在它的构造函数中使用 DI(我在构造函数中有对象)这意味着我无法访问实例化类所需的类的非静态变量。 我尝试使用 Provider,但我真的不明白在哪里绑定(bind)它,因为我不想有一个主类的接口(interface)(如果需要的话)。
最佳答案
如果您想将一个类的静态实例与依赖注入(inject)混合使用,那么您有点错过了依赖注入(inject)的要点:您可以简单地注入(inject)该类的实例。
如果你希望你的注入(inject)器有一个类的单个实例,将它绑定(bind)在 @Singleton
范围内:要么:
bind(YourClass.class).in(Singleton.class);
在你模块的 configure()
方法中,或者
@Provides @Singleton YourClass provideYourClassInstance() {
// ...
}
在你的模块中,或者
@Singleton class YourClass {
// ...
}
在实际的类声明中。
然后像注入(inject)其他实例一样注入(inject)这个实例:
class SomeOtherClass {
@Inject SomeOtherClass(YourClass instance) {
// ... Do something with instance, like assign it to a field.
}
}
重点是 SomeOtherClass
不需要知道任何关于 instance
的生命周期:它是一个单例实例还是每个类都无关紧要使用它有自己的实例。
关于java - 在构造函数中带参数的 DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43148058/