我有一个用例,在Guice模块中,我提到过对于我的接口MyInterface
,像这样绑定这个实现MyImplementation
-bind(MyInterface.class).as(MyImplementation.class).asEagerSingleton();
我有另一个名为的类,它需要直接依赖MyImplementation
,我注入它就像-
@AllArgsConstructor(onConstructor = @__(@Inject))
class TestingClass {
private MyImplementation myImplementation;
}
然而,这样做的问题是,如果你直接在代码中的某个地方注入MyImplementation,它将不会是MyInterface使用的同一个示例,即使你在Guice中将MyInterface绑定到MyImplementation作为一个单例。这是因为当您直接注入一个类时,Guice会使用该类的构造函数创建该类的新示例,而不需要经过绑定过程。换句话说,MyImplementation的注入绕过了Guice的依赖注入机制。
有没有一种方法可以确保注入到类TestingClass
中的示例与MyInterface
在任何地方注入时使用的示例相同?我不能在TestingClass
中注入MyInterface
而不是MyImplementation
。
我也试过使用Provider
-
class TestingClass {
@Inject
Provider<MyImplementation> myImplementationProvider;
public void something() {
MyImplementation myImpl = myImplementationProvider.get();
}
}
但似乎这也不起作用。有什么方法可以确保这种单例行为?
1条答案
按热度按时间wwwo4jvm1#
您可以将实现绑定为单例,然后将接口绑定到实现: