Injector.getInstance (..) возвращает новый экземпляр для синглтона - PullRequest
8 голосов
/ 10 февраля 2009

Мой модуль:

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

Теперь я ожидаю получать один и тот же экземпляр каждый раз, когда делаю

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

Но если я сделаю

injector.getInstance( TranslatorImpl.class );

Я получаю новый экземпляр каждый раз. Это ошибка или ожидаемое поведение?

1 Ответ

17 голосов
/ 10 февраля 2009

Это ожидаемое поведение, потому что TranslatorImpl.class не привязан к одноэлементной области, только Translator.class.

Если вы хотите, чтобы оба getInstance(..) возвращали один и тот же экземпляр, вы можете привязать реализацию к одноэлементной области:

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

Подробнее см. https://github.com/google/guice/wiki/Scopes#applying-scopes.

...