Tengo una aplicación web que usa GIN para inyectar dependencias en el punto de entrada.Guice/Gin. Cómo inyectar implementaciones múltiples
private InjectorService injector = GWT.create(InjectorService.class);
@GinModules({PlaceContollerInject.class, RootViewInject.class})
public interface InjectorService extends Ginjector {
RootView getRootView();
PlaceController getPlaceConroller();
}
public class RootViewInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewImpl.class);
}
}
necesito una versión móvil que utilizan diferentes RootView aplicación. Las dependencias se describen en el siguiente módulo
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}
La pregunta es cómo elegir la dependencia necesaria condicional si necesitamos la versión móvil o por defecto. He visto GWT-GIN Multiple Implementations, pero no he encontrado esa solución porque el proveedor rompe la cadena de dependencias y el patrón de fábrica rompe la capacidad de prueba. En el video "Gran Modular Java con Guice" here (12 minute) se presentó el inyector de Guice con módulos como reemplazo de Factories. Así que mi pregunta es si debo crear diferentes Ginjector para móviles y versiones predeterminadas (como MobileFactory y DefaultFactory) de mi aplicación, o sería una mala práctica y debería configurar una instancia de Ginjector con todas las versiones necesarias. Por ejemplo, con los enlaces de anotación como este.
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}
y utilizar fijaciones @mobile anotados en GWT punto
@Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}
entrada en un ejemplo tan simplificada como anteriormente puede ser que sea posible. Pero si una aplicación tiene más dependencias que necesitan versiones móviles y predeterminadas. Parece que se remonta a fábricas "feísimas" (como se decía en la presentación de Guice) "no probables". Lo siento por mi inglés. Cualquier ayuda es apreciada.
Solo quería agregar que la idea aquí y la solución de @aldanok podrían usarse también para la personalización específica del cliente en la aplicación. Específico del cliente: gwt.xml + módulo de ginebra + implementaciones de interfaz. – MeTTeO