Вы можете пойти с привязкой аннотации :
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);