У меня есть веб-приложение, которое использует GIN для инъекции зависимостей в точке входа.
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);
}
}
Мне нужна мобильная версия, которая использует другую реализацию RootView. Зависимости описаны в следующем модуле
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}
Вопрос в том, как выбрать необходимую зависимость условно, нужна ли нам мобильная или стандартная версия. Я видел GWT-GIN Multiple Implementations, но не нашел такого решения, потому что Provider разрывает цепочку зависимостей, а Factory Pattern нарушает тестируемость. В видео "Big Modular Java with Guice" здесь (12 минут) инжектор Guice с модулями был представлен как замена фабрикам. Итак, мой вопрос в том, должен ли я создавать разные Ginjector для мобильной и стандартной версий (как MobileFactory и DefaultFactory) моего приложения или это плохая практика и я должен настроить один экземпляр Ginjector со всеми необходимыми версиями. Например, с привязкой аннотаций следующим образом.
public class RootViewMobileInject extends AbstractGinModule {
@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}
и использовать аннотированные @Mobile привязки в точке входа GWT
@Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}
В таком упрощенном примере, как выше, это может быть возможно. Но если приложение имеет больше зависимостей, которым нужны мобильные и дефолтные версии. Это похоже на возврат к нетестируемым "уродливым" (как было сказано на презентации Guice) фабрикам. Извините за мой английский. Любая помощь будет принята с благодарностью.