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