2014-03-26 25 views
0

是否可以在MVVM的接口列表中使用依賴注入?SimpleIoc(MVVMlight)依賴項注入接口列表C#Windows Store

我試過讓依賴項是List<IMyInterface> IList<IMyInterface>。在ViewModelLocator之內,我也嘗試了使用和不使用List<>。如果我這樣做沒有List<>我得到一個緩存沒有List異常值,如果我這樣做,(對於List)我得到一個沒有首選的構造函數異常(因爲列表有多個構造函數,我不能設置因爲它的屬性是.NET內部類)

惟一可行的辦法,我能想到的會限制我的可測性,這將是讓所有的列表作爲具體實現,即我有

List<dataType> data = new List<dataType>(); 

有沒有辦法給IOC一份清單?或者你應該具體代碼?

回答

1

ViewModelLocator可以擁有可通過它訪問的靜態對象。

public class ViewModelLocator 
{ 
    .... 
    private static List<IMyInterface> _myInterfaces; 
    public static List<IMyInterface> MyInterfaces 
    { 
     get 
     { 
      return _myInterfaces; 
     } 
     set 
     { 
      // So that it will be readonly. Technically unnecessary, but may be good 
      // practice. 
      if(_myInterfaces != null) return; 
      _myInterfaces = value; 
     } 
    } 
} 

然後在你的主應用程序,無論你得到你的列表中,

ViewModelLocator.MyInterfaces = GetMyInterfaceList(); 

希望這有助於和編碼快樂!

+0

看起來不錯,當我在代碼下一步我會嘗試 –

+0

我不認爲這是真的正確..它所做的就是把我的IOC容器變成一個單身...只是爲了澄清,我是試圖使它能夠將一個接口列表註冊到我的IOC容器中,然後動態分配列表中的什麼類型的類(實現接口) –

+0

這就是您的IOC在某種程度上。它是通過便攜式界面聲明的'singleton'ViewModels和控制器的靜態訪問。這樣做你會得到[一些好處](http://stackoverflow.com/questions/1328263/singleton-vs-servicelocator),比如更簡單的集中配置,生命週期管理,更好的可測試性,更低的耦合性,關注點分離等。 –