4

나는 (대부분의 경우에 효과가있는) Jimmy Bogard's advice for automapping through an actionfilter을 따르려고합니다. 하지만 매핑 할 컬렉션 속성이있는 사용자 지정보기 모델이 있다면 어떻게해야합니까? 예를 들어,IEnumerable <T> 속성이있는 ViewModel에 대한 automapper 사용 방법

public class WidgetSearchViewModel 
{ 
    public WidgetSearchOptionsViewModel Options { get; set; } 
    public GenericListPagerViewModel Pager { get; set; } 
    public IEnumerable<WidgetSearchResultModel> Results { get; set; } 
} 

결과 속성은 내가 automapper를 사용하여 WidgetSearchResultModel 인스턴스로 변환 할 도메인 개체의 IEnumerable을, 같은 저장소에서 온다. 문제는 옵션 및 호출기 속성을 채우기 위해 컨트롤러에 WidgetSearchViewModel을 만들어야한다는 것입니다. AutoMapper ActionFilter를 사용하여 Results 속성 OnActionExecuted를 채우는 방법은 무엇입니까? 가능한가, 아니면 매퍼를 넣어야 할 것인가? 컨트롤러에 맵 호출을하고 유닛 테스트의 모든 매핑을 부트 스트랩합니까?

답변

2

Automapper는 이미 IEnumerable을 구현하는 중첩 세트 간의 매핑을 지원합니다. 부모와 자식 속성 매핑을 정의하면 automapper는 중첩 된 컬렉션을 잘 매핑합니다. 당신이 CustomTypeConvertor 구현하는 경우

Automapper은 아무것도 아무것도 매핑 처리 할 수 ​​http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters&referringTitle=Home

+1

또한, 단위 테스트 (Mapper.AssertConfigurationIsValid를 호출 할 수 있습니다) 그러면 구성을 테스트 할 수 있습니다. – CRice

+0

두 분 모두 고마워요. 궁금하네요, 내 질문에 WidgetSearchViewModel 클래스 예제에 해당하는 도메인/엔티티가 없으면 컨트롤러 코드를 어떻게 작성합니까? 컨트롤러는 옵션 및 호출기 속성을 채워야합니다. 여기에는 해당 엔티티가 없습니다. IEnumerable Results 속성을 가진 일치하는 DTO 클래스를 만들고 컨트롤러에 채우고 Automapper를 변환해야합니까? 아니면이 같은 시나리오를 위해 컨트롤러에 매핑을 남기는 것이 더 낫지 않습니까? 어떻게 할 건데? – danludwig

관련 문제