Ho una webapp che usa GIN per iniettare dipendenze al punto di ingresso.Guice/Gin. Come iniettare più implementazioni
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);
}
}
ho bisogno di una versione mobile che utilizzano implementazione RootView diverso. Le dipendenze sono descritti nella seguente modulo di
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}
La domanda è: come scegliere la dipendenza necessario condizionale se abbiamo bisogno versione mobile o di default. Ho visto GWT-GIN Multiple Implementations, ma non ho capito quella soluzione perché il Provider rompe la catena delle dipendenze e il Modello di fabbrica rompe la testabilità. Nel video "Big Modular Java with Guice" here (12 minute) L'iniettore di Guice con moduli è stato presentato in sostituzione delle fabbriche. Quindi la mia domanda è se dovessi creare diverse Ginjector per le versioni mobile e di default (come MobileFactory e DefaultFactory) della mia app o sarebbe una cattiva pratica e dovrei configurare un'istanza di Ginjector con tutte le versioni necessarie. Ad esempio con i collegamenti di annotazione come questo.
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}
e utilizzare legature @Mobile annotati in GWT voce punto
@Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}
In un tale esempio semplificato come sopra potrebbe essere possibile. Ma se un'applicazione ha più dipendenze che richiedono versioni mobili e predefinite. Sembra che tornino a "fabbriche" (come si diceva la presentazione di Guice) non "testabili". Ci scusiamo per il mio inglese. Qualsiasi aiuto è apprezzato.
Volevo solo aggiungere che l'idea qui e la soluzione di @aldanok potrebbero essere utilizzate anche per la personalizzazione specifica del client nell'applicazione. Client specifico: gwt.xml + modulo gin + implementazioni di interfaccia. – MeTTeO