获取 Guice Provider 创建的所有实例

Get all instances created by Guice Provider

假设 ClassX 为:

class ClassX {
    
    int value;
    
    ClassX() {
        this.value = new Random().nextInt(10);
    }

    //equals and hashCode depend on "value"
}

如果我有一个 Provider 作为:

@Provides
public ClassX createInstance() {
    return new ClassX();
}

有没有办法注入所有创建的实例,所以我可以总结 total 中的所有值?我试过类似的东西:

@Inject
public Test(Set<ClassX> set) {
    this.set = set
}

int total() {
    return this.set.stream()
            .map(classX -> classX.value)
            .reduce(0, Integer::sum);
}

但是失败了。值得一提的是,我阅读了有关 MultiBinder 的内容,但我需要这些实例才能将它们添加到 Set,因此,对于这种情况似乎不是一个选项。

仅在 Provider 中维护列表的简单情况是否可以解决问题?在 instances.

附近使用您喜欢的线程安全方法
class MyProvider implements Provider {
   Set<ClassX> instances = new HashSet<>();

   public ClassX get() {
        ClassX classX = new ClassX();
        instances.add(classX);
        return classX;
   }

   public Set<ClassX> getInstances() {
      // ... calculate what you need
   }
}

我认为没有任何方法可以告诉 Guice 保存它创建或提供的所有实例。