在 Guice 中注入对象数组

2022-09-04 06:28:06

我想在 Guice 中实现类似于以下内容的内容:

public MyClass {

    private final InjectedObject[] injectedObjects;

    @Inject
    public MyClass(InjectedObject[] injectedObjects) {
        this.injectedObjects=injectedObjects;
    }
}

即我希望能够创建一定数量的对象实例,并将它们作为数组注入到另一个对象中。我可能会这样做:

public MyClass {

    private final InjectedObject[] injectedObjects;

    @Inject
    public MyClass(InjectedObjectProvider injectedObjectProvider) {
        this.injectedObjects=injectedObjectProvider.getArrayOfInjectedObjects(5);
    }
}

...但我想知道是否有另一条路线更优雅?


答案 1

不确定这是否适合您的需求,但是当我需要注入相同类型的多个元素时,Multibindings对我有用(尽管它会产生一个集合)。


答案 2

我很好奇为什么你想要热切地创建几个对象。每次需要实例时,注入 和 调用可能会成功。如果你真的需要5,你可以在一个循环中构建它们:Provider<InjectedObject>Provider.get()

public MyClass {
  private final List<InjectedObject> injectedObjects;

  @Inject
  public MyClass(Provider<InjectedObject> injectedObjectProvider) {
    injectedObjects = new ArrayList<InjectedObject>();
    for (int i = 0; i < 5; i++) {
      injectedObjects.add(injectedObjectProvider.get());
    }
  }
}

推荐