Я использую пользовательский метод перехвата для фильтрации записей (фильтр основан на том, кто является текущим пользователем), однако у меня есть некоторые трудности (это тело метода Invcept-перехватчиков)Unity Interception - пользовательское поведение перехвата
var companies = methodReturn.ReturnValue as IEnumerable<ICompanyId>;
List<string> filter = CompaniesVisibleToUser();
methodReturn.ReturnValue = companies.Where(company =>
filter.Contains(company.CompanyId)).ToList();
КомпанииVisibleToUser предоставляют строковый список идентификаторов компании, которые пользователю разрешено просматривать.
Моя проблема - входящие данные - компании - будут IList различных типов, все из которых должны реализовывать ICompanyId, чтобы данные были отфильтрованы на companyId. Тем не менее, кажется, что приведение - как IEnumerable приводит к возврату данных, как этот тип, который вызывает проблемы в дальнейшем стека вызовов.
Как я могу выполнить фильтр без изменения типа возврата?
Исключение я получаю
Невозможно привести объект типа 'System.Collections.Generic.List 1[PTSM.Application.Dtos.ICompanyId]' to type 'System.Collections.Generic.IList
1 [PTSM.Application.Dtos.EmployeeOverviewDto].
Чем выше Вызывающий
public IList<ApplicationLayerDtos.EmployeeOverviewDto> GetEmployeesOverview() { return _appraisalService.GetEmployeesOverview(); }
Если я изменю
IEnumerable <ICompanyId>
к IEnumerable <EmployeeOverviewDto>
он работает, как ожидалось, но очевидно, что это не то, что я хочу, как список фильтрации будет не всегда должны быть такого типа.
Что значит, что приведение к 'IEnumerable' вызывает некоторую проблему с преобразованием? Объект в типе памяти никогда не менялся. –
Tejs
@David: И каков исходный тип возврата? –
@Tejs Я отредактировал мой вопрос, чтобы включить более подробную информацию – David