mvvm light simpleIoc конструктор для инъекций

Я хочу добавить список в мой конструктор viewmodel с помощью ServiceLocator

моя модель представления:

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 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>();
        }
    }

когда я запускаю этот код, я получаю сообщение об ошибке: "Не удается зарегистрироваться: в List`1 найдено несколько конструкторов, но ни один не помечен PreferredConstructor". PS: я получил эту ошибку, только когда я пытаюсь зарегистрировать список "IList", но когда я регистрирую свой интерфейс следующим образом:

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

работает нормально, есть идеи как зарегистрировать список? заранее спасибо

1 ответ

Решение

Не отображать IList интерфейс, используйте завод для вашего ShowEmployeeViewModel учебный класс:

SimpleIoc.Default.Register(() => new ShowEmployeeViewModel(new List<IEmployee>()));
Другие вопросы по тегам