我有以下课程,其中我需要使用Guice进行方法注入。
@Singleton
public class A {
private final Injector injector;
@Inject
public A(Injector injector) {
this.injector = injector;
}
public void method1() {
...
final XInterface x = this.injector.getInstance(Key.get(XInterface.class, Names.named("provideX")));
...
}
}
该模块包含以下提供的方法:
public class MyModule extends AbstractModule {
@Override void configure() {
// no binding and scope for class A
}
@Provides
@Named("provideX")
public XInterface provide(@Named("isTest") boolean isTest, X x, XMock xMock) {
return isTest ? xMock : x;
}
}
isTest
在同一模块中有一个提供者,在本次讨论中可以忽略。
现在,A类中的这个注入给了我以下错误:
Unable to create binding for `A`. It was already configured on one or more child injectors or private modules. If it was in a PrivateModule, did you forget to expose the binding?
并且堆栈跟踪的其余部分不是很有帮助。
在挖掘了一段时间并尝试了一些事情之后,我发现只需在Singleton
中为A类定义MyModule.configure()
范围就像这样:bind(A.class).in(Singleton.class);
并删除现有的A类的@Singleton
注释解决了错误。现在我的问题有两个:
提前致谢!