Если вам нужно многократно выбирать во время выполнения, какая реализация использовать mapbinder очень подходит.
У вас есть такая конфигурация:
@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
}
Вы можете даже заполнить инжектор выбранной службой, используя пользовательские области действия .