8 Stimmen

Injector.getInstance(..) gibt eine neue Instanz für ein Singleton zurück

Mein Modul:

bind( Translator.class ).to( TranslatorImpl.class ).in( Scopes.SINGLETON );

Jetzt erwarte ich, dass ich jedes Mal den gleichen Fall bekomme, wenn ich die

Injector injector = ...;
injector.getInstance( Translator.class );

Aber wenn ich es tue

injector.getInstance( TranslatorImpl.class );

Ich bekomme jedes Mal eine neue Instanz. Ist dies ein Fehler oder erwartetes Verhalten?

18voto

albertb Punkte 2804

Dies ist das erwartete Verhalten, denn TranslatorImpl.class ist nicht an den Singleton-Bereich gebunden, nur Translator.class ist.

Wenn Sie beides wollen getInstance(..) um die gleiche Instanz zurückzugeben, können Sie die Implementierung an den Singleton-Bereich binden:

bind(Translator.class).to(TranslatorImpl.class);
bind(TranslatorImpl.class).in(Scopes.SINGLETON);
assertEquals(injector.getInstance(Translator.class), injector.getInstance(TranslatorImpl.class));

Siehe https://github.com/google/guice/wiki/Scopes#applying-scopes für weitere Einzelheiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X