Guice Multibindings requieren que addBinding explícitamente() para A
& B
a YourInterface
. Si desea una solución más "transparente" (automática) como AFAIK Spring ofrece lista para usar, suponiendo que Guice ya conoce A
& B
porque ya tiene un enlace para A
& B
en cualquier lugar, incluso si no es explícito, sino simplemente implícito, por ejemplo a través de un @Inject
en otro lugar, entonces y sólo entonces, alternativamente, podría utilizar algo como esto para auto-descubrimiento (inspired by as done here, basado en accessing Guice injector in a Module):
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);
}
}
Nota de nuevo que este enfoque no requiere ningún tipo de exploración ruta de clases; simplemente mira todas las vinculaciones ya conocidas en el inyector para cualquier cosa que IS-A YourInterface
.
Lo hace de hecho. Gracias por señalarme en la dirección correcta. –
Encontrará Multibindings en un jar separado ("extensión de guice"): http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.google.inject.extensions%22%20AND% 20a% 3A% 22guice-multibindings% 22 – Peti