Я изучаю EF4.1 вместе с MVVM, и в одном из этих учебных пособий они создают MainWindowViewModel с объектом Repository, который они используют при вызове другой модели представления (EmployeeListViewModel). Вот код:
public MainWindowViewModel()
{
IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities());
_vmRepository = new GenericRepository(adapter.ObjectContext);
EmployeeListViewModel viewModel = new EmployeeListViewModel(_vmRepository);
this.ViewModels.Add(viewModel);
}
public EmployeeListViewModel(GenericRepository repository)
{
if (repository == null)
{
throw new ArgumentNullException("repository");
}
_employeeRepository = repository;
this.AllEmployees = new ObservableCollection<Employee>(_employeeRepository.GetAll<Employee>());
}
Что мне интересно, так это то, почему репозиторий создается в MainWindowViewModel и затем передается в EmployeeListViewModel? Почему бы просто не создать хранилище в EmployeeListViewModel следующим образом:
public MainWindowViewModel()
{
EmployeeListViewModel viewModel = new EmployeeListViewModel();
this.ViewModels.Add(viewModel);
}
public EmployeeListViewModel()
{
IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities());
_employeeRepository = new GenericRepository(adapter.ObjectContext);
this.AllEmployees = new ObservableCollection<Employee>(_employeeRepository.GetAll<Employee>());
}
Я довольно новичок в EF, но кажется немного чище создать репозиторий в каждой отдельной ViewModel. Не будет ли затем очищаться хранилище, когда рассматриваемая модель больше не используется, вместо того, чтобы хранить его до закрытия MainWindowViewModel, или это создает слишком много экземпляров хранилища?