Используйте расширение Multibinder
Но ... вам придется использовать Set
, а не List
.
Кроме того, перед запуском обратите внимание, что, хотя Multibinder является расширением, он уже интегрирован в основной артефакт Guice уже в нескольких выпусках.
Создайте общий статический метод, подобный этому:
public static LinkedBindingBuilder<SomeType> bindSomeTypeSetElement(Binder binder) {
return Multibinder.newSetBinder(binder, SomeType.class).addBinding();
}
Я говорю вам написать такой метод, потому что потом будет легче найти определение привязки, а если вы захотите изменить SomeType
на OtherType
, это будет легче сделать одним методом. Наконец, если вы хотите изменить привязку (например, использовать аннотацию для идентификации), это также проще.
Теперь в модулях, которые вы хотите связать, просто напишите следующий код в ваших configure
методах:
import static path.to.SomeTypeBinder.bindSomeTypeSetElement;
public void configure() {
bindSomeTypeSetElement(binder()).toInstance(new ConcreteType());
bindSomeTypeSetElement(binder()).to(SecondConcreteType.class);
bindSomeTypeSetElement(binder()).toProvider(new ThirdConcreteTypeProvider());
}