1

Я пытаюсь сделать что-то вроде этого.Что это значит, когда я вижу «Повторный вход не разрешен»?

class A extends B { 
    Injector injector = Guice.CreateInjector(this); 
    // ......statements... 
} 

Он бросает IllegalStateException: Re-записи не допускается

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

Вы можете вставить свой файл конфигурации? –

+0

Конфигурировать файл как в? извините, я новичок в Guice. какой файл мне нужно вставить? – hck3r

+0

createInjector принимает один или несколько модулей. Являются ли модули A и B? Не могли бы вы привести полный пример, который позволит понять, что вы пытаетесь сделать? –

ответ

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 сам .. Я использую Guice для всего и I все еще никогда не вызывали его более одного раза в том же приложении. Идея заключается в том, что вы создаете свои модули, передаете их в инжектор, а затем позволяете Guice вводить все остальное для вас. См .: Getting Started

Что вы пытаетесь сделать, это заставило вас попытаться это сделать? Примечание: Пожалуйста, не отвечайте мне, редактируя свой вопрос или комментируя, так как эти две вещи будут invalidate this answer. Вместо этого ask a new question, который объясняет, что вы действительно пытаетесь сделать, и avoid the XY problem.

Смежные вопросы