我有以下问题:
@Inject
MyClass(Service service) {
this.service = service;
}
public void doSomething() {
service.invokeSelf();
}
我有一个模块
bind(service).annotatedWith(Names.named("serviceA").to(ServiceAImpl.class);
bind(service).annotatedWith(Names.named("serviceB").to(ServiceBImpl.class);
现在我的问题是我想允许用户通过命令行参数在运行时动态选择注入。
public static void Main(String args[]) {
String option = args[0];
.....
}
我怎么能这样做呢?我是否必须创建多个模块才能做到这一点?
如果您需要在运行时重复选择使用哪个实现地图绑定器 http://code.google.com/p/google-guice/wiki/Multibindings是非常合适的。
你有这样的配置:
@Override
protected void configure() {
MapBinder<String, Service> mapBinder = MapBinder.newMapBinder(binder(), String.class, Service.class);
mapBinder.addBinding("serviceA").to(ServiceAImpl.class);
mapBinder.addBinding("serviceB").to(ServiceBImpl.class);
}
然后在您的代码中只需注入地图并根据您的选择获取正确的服务:
@Inject Map<String, Service> services;
public void doSomething(String selection) {
Service service = services.get(selection);
// do something with the service
}
您甚至可以使用所选服务填充注入器自定义范围 http://code.google.com/p/google-guice/wiki/CustomScopes.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)