Как позволить Guice привязать аннотированную инъекцию к одному экземпляру - PullRequest
1 голос
/ 06 марта 2012

У меня есть компонент пользовательского интерфейса, который будет использоваться в нескольких модулях пользовательского интерфейса в приложении.

Я хотел бы отметить, что компонент пользовательского интерфейса, который должен быть внедрен в несколько других классов в одном модуле пользовательского интерфейса, должен быть одноэлементным, но не одноэлементным для всего приложения. Так что для каждого модуля пользовательского интерфейса используется компонент пользовательского интерфейса, используется один и только один экземпляр компонента пользовательского интерфейса.

Я не смог найти прямого решения для этого из документа Guice. Так что я думаю, может быть, я смогу использовать аннотацию, чтобы различать эти экземпляры? Скажем, в модуле A я аннотирую все внедрения компонента пользовательского интерфейса с помощью Named("ModuleA"); и в модуле B, с Named("ModulaB"). и в конфигурации я попытался использовать что-то вроде:

this.bind(UIComponentA.class)
    .annotatedWith(Names.named("ModulaA"))
    .to(UIComponentAImpl.class).in(Singleton.class);

this.bind(UIComponentA.class)
    .annotatedWith(Names.named("ModulaB"))
    .to(UIComponentAImpl.class).in(Singleton.class);

Поскольку UICompoenetAImpl также необходимо ввести, поэтому я не мог просто создать экземпляр там. Совершенно не уверен, что это работает.

И мне интересно, каков стандартный способ сделать это?

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Еще одним вариантом может быть использование детского инжектора для каждого модуля.

Это позволит вам связать экземпляр разности UIComponentA в каждом модуле. Свяжите их в детском инжекторе, а не родителе. Затем вам нужно будет убедиться, что все зависимости вашего модуля построены из правого дочернего инжектора, возможно, убедившись, что корень каждого модуля загружен из правильного места.

0 голосов
/ 06 марта 2012

Поскольку UICompoenetAImpl также необходимо ввести, поэтому я не мог просто создать экземпляр там.

Я думаю, что вы можете просто создать там UIComponentAImpl и привязать к экземпляру.Когда вы это сделаете - другие компоненты будут добавлены в UIComponentAImpl.Пожалуйста, смотрите мой пример здесь .

...