2009-02-10 10 views
6

Mon Module:Injector.getInstance (..) retourne une nouvelle instance pour un singleton

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

Maintenant, je vous attendre à obtenir la même instance à chaque fois que je fais

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

Mais si je

injector.getInstance(TranslatorImpl.class); 

Je reçois une nouvelle instance à chaque fois. Est-ce un bug ou un comportement attendu?

Répondre

15

Ceci est le comportement attendu car TranslatorImpl.class n'est pas lié à la portée singleton, seul Translator.class l'est.

Si vous voulez à la fois getInstance(..) pour revenir le même exemple, vous pouvez lier la mise en œuvre à la portée singleton:

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

Voir https://github.com/google/guice/wiki/Scopes#applying-scopes pour plus de détails.