我有一个界面
public interface IInterface{}
我有一个这个界面的实现列表:
public class MyClass1 implements IInterface{}
public class MyClass2 implements IInterface{}
我想与Pico Container合作:
注册 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
能够注入阵列是必要的:
container.addComponent(MyClass1.class);
container.addComponent(MyClass2.class);
container.addComponent(MyTest.class);
MyTest test = container.getComponent(MyTest.class);
这将注入所有实现的数组。但这种行为非常不明确,也不直观。至于我,最好注册成对。
答案 0 :(得分:1)
第1部分与您描述的完全一致。只需按常规方式注册任意数量的实现,然后将它们作为数组注入(不需要任何注入参数)或collection。您可以在sample project // ServerRegistrar,AppPico
中查看包含数组的示例对于第二部分,有几个内置的解决方案,例如使用命名注释(就像在Guice中一样)我个人不赞成。或使用injection parameters(接近您的期望)。或者使用一些自定义方法,如果你愿意,我可以详细解释。