我正在尝试这样做。
class A extends B {
Injector injector = Guice.CreateInjector(this);
// ......statements...
}
投掷IllegalStateException
:不允许重新进入
com.google.inject.internal.util.$Preconditions.checkState(Preconditions.java:142)
at com.google.inject.AbstractModule.configure(AbstractModule.java:55)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
为什么会这样?
答案 0 :(得分:4)
如果您在Guice.createInjector()
方法中的相同模块实例上调用configure
,则唯一的方法就是这样。如果你像在你的例子中那样在对象构造中调用它,那么不会发生。这里的代码将重现该堆栈跟踪。
class B extends AbstractModule {
protected void configure() {
}
}
public class A extends B {
Injector injector;
@Override
protected void configure() {
injector = Guice.createInjector(this);
}
}
public class GuiceTest {
public static void main(String... args) {
A a = new A();
Injector inj = Guice.createInjector(a);
}
}
我对如何修复它的回答是......不要这样做!甚至没有任何理由这么做。
在您知道自己在做什么之前,不应该在您的应用程序中多次致电Guice.createInjector()
,而且这一次通常在Main
课程中,或者在您的static void main
课程中{1}}方法本身..我使用Guice来处理所有事情,而仍然没有在同一个应用程序中多次调用它。我们的想法是,您构建模块,将它们传递到您的注入器中,然后让Guice为您注入其他所有内容。请参阅:Getting Started
你想做什么让你尝试这样做?注意:请不要通过编辑您的问题或发表评论来回答我,因为这两件事invalidate this answer.相反,ask a new question解释了您真正想要做的事情,以及{ {3}}