2009-02-10 101 views
6

我的模塊:Injector.getInstance(..)返回一個新的實例單身

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

現在我期望能獲得相同的實例,每次當我做

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

但如果我這樣做

injector.getInstance(TranslatorImpl.class); 

我每次都得到一個新的實例。這是一個錯誤還是預期的行爲?

回答

15

這是預期的行爲,因爲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