2009-02-10 25 views
6

Mi Módulo:Injector.getInstance (..) devuelve una nueva instancia de un producto único

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

Ahora esperan obtener el mismo cada instancia cuando lo haga

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

Pero si lo hago

injector.getInstance(TranslatorImpl.class); 

Me aparece una nueva instancia cada vez. ¿Es esto un error o un comportamiento esperado?

Respuesta

15

Este es el comportamiento esperado porque TranslatorImpl.class no está vinculado al ámbito singleton, solo Translator.class es.

Si quieres tanto getInstance(..) para devolver el mismo ejemplo, se podría obligar a la aplicación al ámbito Singleton:

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

Ver https://github.com/google/guice/wiki/Scopes#applying-scopes para más detalles.

Cuestiones relacionadas