8

私のモジュール:

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

今、私は毎回同じインスタンスを取得することを期待しています

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

でももしそうなら

injector.getInstance( TranslatorImpl.class );

毎回新しいインスタンスを取得します。これはバグですか、それとも予想される動作ですか?

4

1 に答える 1

17

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を参照してください。

于 2009-02-10T04:39:29.207 に答える