C# mvvm轻型simpleIoc构造函数注入

C# mvvm轻型simpleIoc构造函数注入,c#,dependency-injection,mvvm-light,simpleioc,C#,Dependency Injection,Mvvm Light,Simpleioc,我想用ServiceLocator向viewmodel构造函数注入一个列表 我的viewmodel: public class ShowEmployeeViewModel: ViewModelBase { private IList<IEmployee> _empl; public ShowEmployeeViewModel(IList<IEmployee> emp) { this._empl = emp; _

我想用ServiceLocator向viewmodel构造函数注入一个列表

我的viewmodel:

public class ShowEmployeeViewModel: ViewModelBase
{
    private IList<IEmployee> _empl;

    public ShowEmployeeViewModel(IList<IEmployee> emp)
    {

        this._empl = emp;

        _empl.Add(new Employee() { empName = "foo", enpFunction = "bar" });
    }
}
public类ShowEmployeeViewModel:ViewModelBase
{
私人律师事务所;
公共ShowEmployeeViewModel(IList emp)
{
这个。_emp=emp;
_Add(newemployee(){empName=“foo”,enpffunction=“bar”});
}
}
我的servicelocator:

public class ViewModelLocator
{

    public ViewModelLocator()
    {

        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        //register the interface against the class

        SimpleIoc.Default.Register < IList < IEmployee >, List <Employee>>();


        SimpleIoc.Default.Register<ShowEmployeeViewModel>();

    }

    public MainViewModel Main
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MainViewModel>();
        }
    }
    public ShowEmployeeViewModel ShowEmployee
    {
        get
        {
            return ServiceLocator.Current.GetInstance<ShowEmployeeViewModel>();
        }
    }
公共类ViewModelLocator
{
公共ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default);
//针对类注册接口
SimpleIoc.Default.Register,List>();
SimpleIoc.Default.Register();
}
公共主视图模型主视图
{
收到
{
返回ServiceLocator.Current.GetInstance();
}
}
公共ShowEmployeeViewModel ShowEmployee
{
收到
{
返回ServiceLocator.Current.GetInstance();
}
}
运行此代码时,出现了一个错误: “无法注册:在列表`1中找到多个构造函数,但没有一个用PreferredConstructor标记。” PS:我只在尝试注册列表“IList”时出现此错误,但当我像这样注册接口时:

SimpleIoc.Default.Register < IEmployee , Employee >();
SimpleIoc.Default.Register();
它很好用,知道如何注册列表吗?
提前感谢

不要映射
IList
界面,请为您的
ShowEmployeeViewModel
类使用工厂:

SimpleIoc.Default.Register(() => new ShowEmployeeViewModel(new List<IEmployee>()));
simpleoc.Default.Register(()=>newshowEmployeeViewModel(new List());

这是可行的,但这不违背依赖项注入的目的吗?我如何根据其接口注册类型?感谢您没有将泛型列表映射到特定类型。这没有意义,因为您希望能够对许多不同类型使用泛型列表。您可以再次映射视图模型接口,例如IShowViewModelnst是一种具体的视图模型类型,但这是另一回事,因为ShowEmployeeViewModel类甚至没有实现接口,所以它在这里不适用。您在这里混为一谈。DI容器(以及一般的DI)不是用来构建DTO和实体;而是用来构建应用程序组件的图形,即包含该应用程序行为的类。
ShowEmployeeViewModel
是DTO,
IEEmployee
是实体。不要在容器中注册它们。