2009-02-10 8 views
6

Mein Modul:Injector.getInstance (..) gibt eine neue Instanz für ein Singleton

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

Jetzt erwarte ich die gleiche Instanz jedes Mal auf, wenn ich

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

tun, aber wenn ich tun

injector.getInstance(TranslatorImpl.class); 

ich eine neue Instanz jedes Mal. Ist das ein Fehler oder erwartetes Verhalten?

Antwort

15

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

Wenn Sie beide getInstance(..) wollen die gleiche Instanz zurückzugeben, können Sie die Implementierung auf den Singleton Umfang 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 Details.

Verwandte Themen