2011-12-01 56 views
1

我正在尝试将服务外观实现到服务中以支持向后兼容性。如何在Google-Guice中实现动态绑定?

但是,我正面临着Guise动态绑定的问题。我需要根据客户端应用程序请求的版本来绑定相应的实现者类。

有没有人有想法如何在谷歌Guice中实现动态绑定?

+0

我昨天回答了一个非常类似的问题: http://stackoverflow.com/questions/8257863/guice-change-binding-by-property-string-in-external-text-file-on-runtime/ 8319512#8319512 – eiden

回答

2

您可以结合annotations去:

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);