1

我有一个界面

public interface IInterface{}

我有这个接口的实现列表:

public class MyClass1 implements IInterface{}
public class MyClass2 implements IInterface{}

我想用 Pico Container 做什么:

  1. 注册IInterface的所有实现,以便能够将它们解析为列表:

    public class MyTest {
        public MyTest(IInterface[] list){}
    }
    
  2. 另一种选择是能够使用命名键注册实现:

    container.addComponent(IInterface.class, MyClass1.class, "name1");
    container.addComponent(IInterface.class, MyClass2.class, "name2");
    

    能够执行以下操作:

    container.getComponent(IInterface.class, "name2");
    

是否有至少第一个问题的内置解决方案?

UPD

  1. 在 Pico 中发现这个实现非常奇怪且不直观。

为了能够注入一个数组,它是必要的:

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

这将注入所有实现的数组。但这种行为非常不清楚,也不直观。至于我,最好注册对。

4

1 回答 1

1

第一部分完全按照您的描述工作。只需以通常的方式注册任意数量的实现,然后它们可以作为数组(不需要任何注入参数)或集合注入。您可以在示例项目中查看带有数组的示例// ServerRegistrar, AppPico

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

于 2016-01-29T21:16:37.113 回答