2012-04-20 3 views
1

사용자 지정 차단 동작을 사용하여 레코드를 필터링합니다 (필터는 현재 사용자가 누구인지를 기반으로합니다). 그러나 난 약간의 어려움을 겪고 있습니다 (이것은 인터셉터 Invoke 메서드의 본문입니다)Unity 차단 - 사용자 지정 차단 동작

var companies = methodReturn.ReturnValue as IEnumerable<ICompanyId>; 
List<string> filter = CompaniesVisibleToUser(); 

methodReturn.ReturnValue = companies.Where(company =>  
    filter.Contains(company.CompanyId)).ToList(); 

CompaniesVisibleToUser는 사용자가 볼 수있는 회사 ID의 문자열 목록을 제공합니다.

들어오는 데이터 - 회사 -이 문제는 회사 ID에서 데이터를 필터링하기 위해 ICompanyId를 구현해야하는 다양한 유형의 IList가 될 것입니다. 그러나 캐스팅 (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을 <EmployeeOverviewDto>

IEnumerable을 <ICompanyId>이를 것으로 예상하지만, 분명히이 목록은 필터링 된 것으로 내가 원하는 아니므로 작동하는 것 항상 그런 유형의 것은 아닙니다.

+0

'IEnumerable '에 대한 캐스트가 일부 변환 문제를 일으키는 것은 무엇을 의미합니까? 메모리 유형의 객체는 변경되지 않았습니다. – Tejs

+0

@David : 원래 반환 유형은 무엇입니까? –

+0

@ Tees 자세한 내용을 포함하도록 질문을 편집했습니다 – David

답변

0

당신이 할당 할 때 :

methodReturn.ReturnValue = companies.Where(company =>  
filter.Contains(company.CompanyId)).ToList(); 

당신은 유형 List<ICompanyId>로 반환 값을 설정됩니다.

public IList<ApplicationLayerDtos.ICompanyId> GetEmployeesOverview() 
{ 
    return _appraisalService.GetEmployeesOverview(); 
} 

을 또는 당신은 같은 것을 그것을 변경할 수 있습니다 :

당신은 할 수 귀하의 높은 호출 기능을 바꿀 수

public IList<ApplicationLayerDtos.EmployeeOverviewDto> GetEmployeesOverview() 
{ 
    var result = (List<EmployeeOverviewDto>)_appraisalService.GetEmployeesOverview().Where(x => x.GetType() == typeof(EmployeeOverviewDto)).ToList(); 

    return result; 
} 

둘 다 작동합니다.