Guice一次获得多个实例

时间:2016-01-31 19:49:02

标签: java guice

我是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);

所以我可以使用相同界面的所有实现!

1 个答案:

答案 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) {
  }
}

请参阅https://github.com/google/guice/wiki/Multibindings