que tienen esta clase:Obtención de una instancia dentro de un módulo de Guice
public class CompositeSecurityAuthorizer implements SecurityAuthorizer {
@inject @CompositeSecurityAuthorizerAnnot
List<SecurityAuthorizer> authorizers; //Field Injection
}
quiero para inyectar el campo authorizers
un valor List<SecurityAuthorizer>
.
En mi módulo, Tengo el siguiente:
@Override
protected void configure() {
bind(CompositeSecurityAuthorizer.class).in(Singleton.class);
bind(StoreAuthorizer.class).in(Singleton.class);
bind(SecurityAuthorizer.class)
.annotatedWith(CompositeSecurityAuthorizerAnnot.class)
.to(CompositeSecurityAuthorizer.class);
}
@Provides @CompositeSecurityAuthorizerAnnot
List<SecurityAuthorizer> provideAuthorizersList()
{
List<SecurityAuthorizer> authList = new ArrayList<SecurityAuthorizer>();
//How do I add StoreAuthorizer while maintaining a Singleton?
//Will the line below do it through Guice magic?
//authList.add(new StoreAuthorizer());
return authList;
}
Mi pregunta está incrustado en los comentarios de código. Cuando estoy añadiendo a StoreAuthorizer
que List<SecurityAuthorizer>
:
- ¿Cómo me aseguro que es la misma instancia que otros
StoreAuthorizer
referencias? - ¿Es algo que Guice está haciendo bajo el capó, por lo que
new StoreAuthorizer()
realmente está llamando a una impl degetInstance()
detrás de escena?
Me olvidé de MultiBinder. Entonces algo como esto? Multibinder securityBinder = Multibinder.newSetBinder (Binder(), SecurityAuthorizer.class); securityBinder.addBinding(). To (StoreAuthorizer.class); –
Snekse
@Snekse: Sí, algo así. – ColinD
Opps, parece que Multibinder no es compatible con Gin. http://code.google.com/p/google-gin/issues/detail?id=111 – Snekse