Мне было интересно, можно ли сопоставить тип модели с типом репозитория с C#/ASP.NET. Как вы видите, я пытаюсь реализовать шаблон репозитория/единицы работы. Пример реализации приведен ниже:Тип модели карты ASP.NET для типа репозитория?
public class UnitOfWork : IDisposable
{
private SchoolContext context = new SchoolContext();
private DepartmentRepository departmentRepository;
private CourseRepository courseRepository;
public DepartmentRepository DepartmentRepository
{
get
{
if (this.departmentRepository == null)
{
this.departmentRepository = new DepartmentRepository(context);
}
return departmentRepository;
}
}
public CourseRepository CourseRepository
{
get
{
if (this.courseRepository == null)
{
this.courseRepository = new CourseRepository(context);
}
return courseRepository;
}
}
имеет проблему, однако, что UnitOfWork нужно держать длинный список свойств для каждого типа хранилища. В этом примере это не так уж плохо, так как существует только два типа сущностей (отдел, курс) с двумя соответствующими репозиториями (репозиторий депонирования и репозиторий курсов). Но по мере роста размера приложения класс UnitOfWork быстро становится большим и беспорядочным с десятками или даже сотнями свойств, это будет не что иное, как класс богов.
Что бы я хотел, это нечто более общее, например, общий метод GetRepository(), который сопоставляет тип модели с объектом репозитория. Ниже псевдокод показывает, что я хочу:
// definition
public TRepository GetRepository<TModel>(){ // pending implementation }
// use-case
var departmentRepository = UnitOfWork.GetRepository<TModel>();
Так как я могу написать такой код, который отображает тип модели на объект хранилища? Я боюсь, что AutoMapper не будет работать, поскольку он отображает только конкретные реализации, а не общие типы. Как вы думаете? Как вы подходите к этой проблеме, когда условием является не жесткое кодирование каждой реализации репозитория как свойств в единице работы?
Удалите репозитории из UnitOfWork. Внесите UoW в репозитории и получите объекты сущности из контекста. – Jasen
Выглядит немного как работа для инъекции зависимостей и инверсии управления. Вы зарегистрировали бы все модели и соответствующие ассоциации репозитория в своем загрузочном устройстве IOC ... – Theo
Вы можете написать свой собственный инструмент для решения этой проблемы –