Как добиться динамического связывания в Google-Guice? - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь внедрить фасад служб в службы для поддержки обратной совместимости.

Однако в динамической привязке Guise я столкнулся с проблемой.Мне нужно связать соответствующий класс разработчика в зависимости от версии, запрашиваемой клиентскими приложениями.

Кто-нибудь имеет идеи, как добиться динамического связывания в Google-Guice?

1 Ответ

2 голосов
/ 02 декабря 2011

Вы можете пойти с привязкой аннотации :

bind(Facade.class).annotatedWith(VersionOne.class).to(OldFacade.class);
bind(Facade.class).annotatedWith(VersionTwo.class).to(NewFacade.class);

и иметь такой код:

@Inject @VersionOne Facade oldFacade;
@Inject @VersionTwo Facade newFacade;
if (version == 1)
    return oldFacade
else
    return newFacade;

Или вы можете использовать multibindings :

MapBinder<Integer, Facade> mapBinder = MapBinder.newMapBinder(binder(), Integer.class, Facade.class);
mapBinder.addBinding(1).to(OldFacade.class);
mapBinder.addBinding(2).to(NewFacade.class);

и затем вы используете его так:

@Inject Map<Integer, Facade> facadeMap;
return facadeMap.get(version);
...