2016-01-28 52 views
1

我有一個接口註冊實現的列表與微微集裝箱

public interface IInterface{} 

我有這個接口的實現的列表:

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

我想用什麼筆克集裝箱做:

  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"); 
    

是否有至少第1個問題的內置解決方案?

UPD

  1. 發現在碧這個實現很奇怪,不直觀。

爲了能夠注入一個數組有必要:

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

這將注入所有實現的數組。但是這種行爲很不明確,不直觀。至於我註冊配對會更好。

回答

1

第一部分的工作原理與您所描述的完全相同。只要以通常的方式註冊任意數量的實現,那麼它們可以作爲數組注入(不需要任何注入參數)或collection。你可以在sample project中看到數組示例// ServerRegistrar,AppPico

對於第二部分,有幾種內置的解決方案,例如,使用命名註釋(就像在Guice中),我個人不贊成。或使用injection parameters(這與您的預期接近)。或者使用我可以詳細解釋的一些自定義方法,如果你想的話。

+0

但我如何註冊實現列表?或者只是一個一個註冊? – deeptowncitizen