Mam webapp, który używa GIN do wstrzykiwania zależności w punkcie wejścia.Guice/Gin. Jak wstrzyknąć wiele implementacji
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);
}
}
muszę mobilną wersję, że używają różnych implementacji RootView. Zależności są opisane w następujący moduł
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}
Pytanie brzmi, jak wybrać potrzebną zależność warunkowo czy musimy wersję mobilną lub domyślną. Widziałem GWT-GIN Multiple Implementations, ale nie doszedłem do tego rozwiązania, ponieważ dostawca zrywa łańcuch zależności, a wzór fabryczny ulega awarii. W "Big Modular Java with guice" wideo here (12 minute) Wtryskiwacz Guice z modułami został przedstawiony jako zamiennik dla fabryk. Więc moim pytaniem jest, czy powinienem stworzyć różne Ginjector dla wersji mobilnych i domyślnych (jak MobileFactory i DefaultFactory) mojej aplikacji, czy byłoby to złe praktyki i powinienem skonfigurować jedną instancję Ginjectora ze wszystkimi potrzebnymi wersjami. Na przykład z powiązaniami adnotacji w ten sposób.
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}
i odnotowany wykorzystują @Mobile GWT wiązanie w punkcie wejścia
@Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}
w taki uproszczony przykład jak wyżej to może okazać się niemożliwe. Ale jeśli aplikacja ma więcej zależności, które wymagają wersji mobilnej i domyślnej. Wygląda na to, że wracamy do niepotwierdzonego "brzydkiego" (jak mówiono w prezentacji Guice) fabryk. Przepraszamy za mój angielski. Każda pomoc jest doceniana.
Chciałem tylko dodać, że pomysł tutaj i rozwiązanie z @aldanok mogą być również używane do specyficznego dostosowania klienta w aplikacji. Specyficzne dla klienta: gwt.xml + moduł gin + implementacje interfejsu. – MeTTeO