Делать то, что вы хотите, на самом деле довольно сложно, потому что ваш общий интерфейс инжектора, который помечен вашим модулем Gin, не может указывать на абстрактный модуль Gin.Модуль Gin, указанный вашим интерфейсом Ginjector, должен быть конкретным.Конкретный модуль не может удовлетворить несколько конфигураций одновременно.
Итак, что вы делаете: (a) Создайте свой интерфейс Ginjector, скажем ClientGinjector и ваш модуль, ClientModule, для настольного приложения.
(b) Создайте второй интерфейс Ginjector, скажем ClientGinjectorTablet, расширяя тот, который вы создали в (a), но с аннотацией GinModule, указывающей на другой модуль, скажем ClientModuletablet.
- Теперь у вас есть два интерфейса Ginjecor по умолчанию и один дополнительный для планшетов, каждыйуказывает на модуль с его собственными реализациями Configure ().
(c) Теперь вы хотите создать Factory, чтобы получить реализацию Right Ginjector.Вы можете сделать это, потому что Ginjector, который вы обслуживали в (a) и (b), имеет общего demonitador, который является интерфейсом по умолчанию, созданным в (a).Таким образом, вы создаете абстрактную факотрицу с помощью такого метода: public abstract ClientGinjector getInjector ();Вы создаете два дочерних конкретных класса: один для получения рабочего стола / Ginjector по умолчанию, а другой - для планшетного Ginjector.
(d) Теперь вы настраиваете gwt.xml вашего модуля так же, как Google IO на YouTube объясняет, что вам следует сделатьПолучите желаемое Facotry во время выполнения, используя отложенные привязки GWT для каждой фабрики Ginjector.
(e) На вашей точке входа вам не нужно получать Ginjector, а ваша фабрика для Ginjectors использует отложенное связывание GWT.Вы вызываете абстрактный метод, который возвращает ClientGinjector, ваш набор.
(f) Эпический провал в конце.Guice не позволит вам дважды связать один и тот же ключ (класс плюс аннотация), даже если вы будете использовать разные инжекторы (один для настольного компьютера и один для планшета).Кажется, что определения привязки ключей являются глобальными, как только у вас есть два модуля, переопределяющих одни и те же ключи, это конец приключения.