2014-03-26 28 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),比如更简单的集中配置,生命周期管理,更好的可测试性,更低的耦合性,关注点分离等。 –