J'ai une application web qui utilise GIN pour injecter les dépendances au point d'entrée.
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);
}
}
J'ai besoin d'une version mobile qui utilise une implémentation différente de RootView. Les dépendances sont décrites dans le module suivant
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}
La question est de savoir comment choisir la dépendance nécessaire en fonction de la version mobile ou par défaut. J'ai vu Implémentations multiples de GWT-GIN mais je n'ai pas encore trouvé de solution parce que le fournisseur brise la chaîne des dépendances et le modèle d'usine brise la testabilité. Dans la vidéo "Big Modular Java with Guice" (en anglais) ici (12 minutes) L'injecteur de modules de Guice a été présenté comme un remplacement des Factories. Ma question est donc de savoir si je dois créer des Ginjector différents pour les versions mobiles et par défaut (comme MobileFactory et DefaultFactory) de mon application ou si ce serait une mauvaise pratique et que je devrais configurer une instance de Ginjector avec toutes les versions nécessaires. Par exemple, avec les liaisons d'annotation comme ceci.
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}
et utiliser les liaisons annotées @Mobile au point d'entrée de GWT
@Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}
Dans un exemple aussi simplifié que celui qui précède, cela pourrait être possible. Mais si une application a plus de dépendances qui nécessitent des versions mobiles et par défaut. Il semble que l'on revienne à des usines "laides" et non testables (comme on l'a dit lors de la présentation de Guice). Désolé pour mon anglais. Toute aide est appréciée.