Я создаю приложение Silverlight, используя Jounce для моего MVVM.У меня есть CustomerListViewModel (множественное число), в котором есть коллекция объектов CustomerViewModel (одиночная).
Я использую Ninject для внедрения зависимостей, потому что мои ViewModels будут зависеть от других классов (то есть репозиториев, служб и т. Д.).).
Использовать внедрение зависимостей довольно просто, но теперь я немного застрял.Когда CustomerListViewModel загрузится, он перейдет в базу данных (у нее уже есть свой репозиторий через DI) и получит объекты Customer.Они должны быть переданы в CustomerViewModel.
Как бы я мог построить эти объекты CustomerViewModel?Я всегда читал, что шаблон Service Locator является анти-шаблоном, поэтому он кажется неправильным:
private void GetCustomerss()
{
var customers = _customerRepository.GetAll();
IList<CustomerViewModel> customerViewModels = new List<CustomerViewModel>();
foreach (var customer in customers)
{
var customerViewModel = ObjectFactory.GetInstance<CustomerViewModel>();
customerViewModel.Model = customer;
customerViewModel.Add(customerViewModel);
}
Customers = new ObservableCollection<CustomerViewModel>(customerViewModels);
}
Как можно избежать этого анти-шаблона?Или это действительно не так уж плохо?
Это также усложняет мое тестирование юнитов, потому что я могу внедрить фиктивный ICustomerRepository в CustomerListViewModel (в конструкторе), но ObjectFactory.GetInstance<CustomerViewModel>()
будет работать как надо, а также разрешать основные зависимости CustomerViewModel.В этом случае произойдет сбой, поскольку я не настроил Ninject для этих базовых зависимостей.