Injector.getInstance (..) retourne une nouvelle instance pour un singleton
-
22-08-2019 - |
Question
Mon module:
bind( Translator.class ).to( TranslatorImpl.class ).in( Scopes.SINGLETON );
Maintenant, je pense à obtenir la même instance à chaque fois que je fais
Injector injector = ...;
injector.getInstance( Translator.class );
Mais si je fais
injector.getInstance( TranslatorImpl.class );
Je reçois une nouvelle instance à chaque fois. Est-ce un bug ou le comportement attendu?
La solution
Ceci est le comportement attendu parce que TranslatorImpl.class
n'est pas lié à la portée singleton, ne Translator.class
est.
Si vous voulez à la fois getInstance(..)
pour revenir la même instance, 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 # d'application de champs pour plus de détails.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow