У вас, кажется, нет необходимости использовать репозиторий в вашей модели представления?Я ожидаю увидеть репозиторий для ваших бизнес-типов, а не для вашей модели представления.
Например ...
PubilsViewModel(ISchool school) { }
Для модели представления учеников просто потребуется школьный экземпляр, введенныйUnity (или выбранный вами IOC), все методы для сохранения, обновления и т. Д. Хранятся в бизнес-объекте.
var school = new School();
school.Save();
school.Update();
или даже в статических методах бизнес-объекта, которые принимают тип школы в своих конструкторах?В любом случае, я ожидал бы, что ваш режим просмотра будет вызывать методы для Business Objects, для объекта School более логично знать детали его сохранения (включая проверку, которую, возможно, необходимо выполнить, прежде чем в конечном итоге разрешить сохранение).в базу данных).
В бизнес-объекте, где у вас будет экземпляр школьного репозитория, бизнес-объекту не нужно знать механизм его работы, то есть передать хранилищебеспокоиться о том, что бизнес-объект просто выполнит любую проверку бизнес-правил для себя, а затем примет решение, следует ли ему сохранять себя в базе данных или нет, вызывая методы в хранилище.
Пример:
public class School
{
private ISchoolRepository _repository;
public string Name { get; set; }
public School()
{
this._repository = IoC.Resolve<ISchoolRepository>();
}
public bool IsValid()
{
// Some kind of business logic?
if (this.Name != null)
{
return true;
}
return false;
}
public void Save()
{
if (this.isValid())
{
this._repository.Save(this)
}
}
Хранилище будет обрабатывать любой код, необходимый для сохранения записи в базе данных.
Школьная организация не должна знать, КАК ее сохранить, нет причин, по которым она не может знатьдетали того, что нужно для того, чтобы спасти меняХотя ... ViewModel не нужно знать, что уровень детализации (и не должен), используя внедрение зависимостей, бизнес-объект (School) просто знает, что ему нужен ISchoolRepository, создает его экземпляр и затем вызывает методы для него.
Это решит вашу проблему ...
// Knows it needs a school.
// When needing to start the save process for a School, would call the methods on the
// school instance provided in the constructor.
PupilViewModel(School school) { }
// Knows it needs a Repository.
// Would perform validation of business rules and call methods on the repository when//
// it is ready to be pursisted.
School(ISchoolRepository repository) {}
// Repository
// Would perform the read / write of the data.
SchoolRepository() {}
Имеет ли это смысл?Надеюсь, вы сможете увидеть разделение проблем, которое вы начали пытаться достичь ... надеюсь, это поможет!
Бен