Dependency injection 向Pico容器注册实现列表

Dependency injection 向Pico容器注册实现列表,dependency-injection,java-8,picocontainer,Dependency Injection,Java 8,Picocontainer,我有一个接口 public interface IInterface{} 我有一个这个接口的实现列表: public class MyClass1 implements IInterface{} public class MyClass2 implements IInterface{} 我想用Pico容器做什么: 注册IInterface的所有实现,以便能够将其解析为列表: public class MyTest { public MyTest(IInterface[] list){

我有一个接口

public interface IInterface{}
我有一个这个接口的实现列表:

public class MyClass1 implements IInterface{}
public class MyClass2 implements IInterface{}
我想用Pico容器做什么:

  • 注册IInterface的所有实现,以便能够将其解析为列表:

    public class MyTest {
        public MyTest(IInterface[] list){}
    }
    
  • 另一个选项是能够使用命名密钥注册实现:

    container.addComponent(IInterface.class, MyClass1.class, "name1");
    container.addComponent(IInterface.class, MyClass2.class, "name2");
    
    能够做以下事情:

    container.getComponent(IInterface.class, "name2");
    
  • 是否有至少第一个问题的内置解决方案

    UPD

  • 在Pico中发现这个实现非常奇怪而且不直观
  • 要能够注入阵列,必须:

    container.addComponent(MyClass1.class);
    container.addComponent(MyClass2.class);
    container.addComponent(MyTest.class);
    MyTest test = container.getComponent(MyTest.class);
    

    这将注入一个包含所有实现的数组。但这种行为是非常不清楚和不直观的。对我来说,最好注册配对。

    第一部分的工作原理与您描述的完全相同。只需以通常的方式注册任意数量的实现,就可以将它们作为一个数组(不需要任何注入参数)或。您可以在//ServerRegistrar,AppPico中看到数组示例


    对于第二部分,有几个内置的解决方案,例如使用命名注释(就像在Guice中一样),我个人不赞成。或使用(接近您的期望)。或者使用一些我可以详细解释的自定义方法。

    但我如何注册实现列表?还是一个接一个地注册?