我是Java和Guice的新手,但我正在寻找是否有可能。
例如,如果a具有接口
public interface A {
}
和多个实现,在Guice模块中将是:
@Override
protected void configure() {
bind(A.class).to(Aimpl.class);
bind(A.class).to(Bimpl.class);
}
我想要有类似的东西:
A[] implementations = injector.getInstance(A.class);
所以我可以使用相同界面的所有实现!
答案 0 :(得分:3)
您可以使用MultiBinder
:
在模块配置中:
@Override
protected void configure() {
Multibinder<A> aBinder = Multibinder.newSetBinder(binder(), A.class);
aBinder.addBinding().to(Aimpl.class);
aBinder.addBinding().to(Bimpl.class);
}
然后,你可以注入一套A:
public class MyConsumer {
@Inject
public MyConsumer(Set<A> instances) {
}
}