Guice Multibindings требует явного добавления addBinding () для A
& B
в YourInterface
.Если вам нужно более «прозрачное» (автоматическое) решение, такое как то, что AFAIK Spring предлагает «из коробки», тогда предположим, что Guice уже знает о A
& B
, потому что у вас уже есть привязка для A
& B
в другом месте, в любом случае, даже если не явное, а просто неявное, например, через @Inject
где-то еще, тогда и только тогда вы, альтернативно, можете использовать что-то подобное для автообнаружения (, вдохновленное тем, что сделано здесь , основанный на доступе к инжектору Guice в модуле ):
class YourModule extends AbstractModule {
@Override protected void configure() { }
@Provides
@Singleton
SomeClass getSomeClass(Injector injector) {
Set<YourInterface> allYourInterfaces = new HashSet<>();
for (Key<?> key : injector.getAllBindings().keySet()) {
if (YourInterface.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {
YourInterface yourInterface = (YourInterface) injector.getInstance(key);
allYourInterfaces.add(yourInterface);
}
return new SomeClass(allYourInterfaces);
}
}
Обратите внимание, что этот подход НЕ требует сканирования пути к классам;он просто смотрит на все уже известные привязки в Инжекторе для всего, что IS-A YourInterface
.