Guice Multibinder с провайдерами
Я пытаюсь иметь возможность иметь это в моем коде
@Inject
private Map providers;
Я пытался, но этот код не компилируется
MapBinder mapbinder = MapBinder.newMapBinder(binder, String.class, Provider.class);
mapbinder.addBinding("splineV1Beta").to(SplineProcessor.class);
mapbinder.addBinding("invertV1Beta").to(InvertProcessor.class);
Этот код не запускается при запуске, так как он можетпривязать мою карту
MapBinder mapbinder = MapBinder.newMapBinder(binder, String.class, Processor.class);
mapbinder.addBinding("splineV1Beta").to(SplineProcessor.class);
mapbinder.addBinding("invertV1Beta").to(InvertProcessor.class);
Как правильно настроить привязки здесь?
ПРИМЕЧАНИЕ: я тоже ищу что-то простое, поэтому разработчики просто добавляют по одной строке каждый раз, когда у нас новый процессор (надеюсь, я ненужно добавить одну строку + какой-то заводской интерфейс ... должен быть способ, но я пробовал другие вещи в дополнение к вышеописанному с помощью методов TypeLiteral и toProvider ()).
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: хорошо, я узнал, есть ли у меня строка ниже (но вообще не вызывать addBinding) Guice запустится, что хорошо, но все сигнатуры метода addBinding (). Теперь неверны, так как они хотят
Provider
//This below line ends up with mabbinder2.addBinder().to() wanting the above param type?
MapBinder mapbinder2 = MapBinder.newMapBinder(binder, stringLit, list);
РАДИКАЛЬНО изменить свое мышление, и я пытаюсь ввести что-то вроде этого (надеясь, что map.get ("ххх») каждый раз создает новые экземпляры ...
@Inject
private Map providers;
и я связал это так, но, к сожалению, карта всегда возвращает один и тот же экземпляр: (...
MapBinder mapbinder = MapBinder.newMapBinder(binder, String.class, Processor.class);
mapbinder.addBinding("splineV1Beta").toProvider(new TypeLiteral() {;});
mapbinder.addBinding("invertV1Beta").toProvider(new TypeLiteral() {;});
РЕДАКТИРОВАТЬ: в соответствии с этим документомhttp://google-guice.googlecode.com/svn/trunk/latest-javadoc/com/google/inject/multibindings/MapBinder.html Вы можете иметь
MapBinder and inject a Map
но когда я делаю это (с закрытым полем), я получаю следующее .... (тогда как, когда я перехожу на другое решение, но неt вызвать mapbinder.addBinding, он связывается и работает просто отлично) ...
1) No implementation for java.util.Map was bound.
Нужно ли использовать инъекцию конструктора, чтобы это работало как их пример? Я нахожусь в абстрактном классе, так что было бы очень неудобно менять 10 классов :(.
спасибо, Дин