У меня есть репозиторий, который получает IEnumerable
разных типов.
Я могу сделать это, используя:
switch (returnType)
{
case ReturnType.HR:
_repo.GetSystemManuals();
break;
case ReturnType.Finance:
_repo.GetPrivateRecords();
break;
case ReturnType.Dev:
_repo.GetTimeLine();
break;
case ReturnType.Admin:
_repo.GetLedger();
break;
case ReturnType.Support:
_repo.GetRoster();
break;
}
Но это нарушает принцип открытия/закрытия SOLID.
Один из способов, которым я думал, - это создать словарь ,
private static readonly IDictionary<S95Type, IQueryable<Customer>> ReqTypeMapper
= new Dictionary<S95Type, IQueryable<HR>>();
ReqTypeMapper.Add(ReturnType.HR, _repo.GetHR()());
Но не уверен, как я могу выполнять разные методы с разными типами возврата.
IRepository<T>
и использовать контейнер DI для создания соответствующего экземпляра. - person Panagiotis Kanavos   schedule 25.01.2018IOfficeRepository
вы используете передачуIRepository<Ledger>
,IRepository<Roster>
и т. д. тем контроллерам, которым они нужны. Если у вас есть контроллер, которому нужныIRepository<Ledger>
иIRepository<Roster>
, это означает, что ваш контроллер, вероятно, слишком толстый. Предполагается, что контроллеры предоставляют конечные точки для ресурсов REST. - person Panagiotis Kanavos   schedule 25.01.2018