2016-08-11 3 views
2

클래스 Foo를 AutoMapper를 사용하여 클래스 Bar에 매핑 중입니다. Bar는 Foo의 ViewModel입니다. Bar는 속성이 적지 만 Bar가 Foo에없는 속성 중 하나에 사용자 지정 유효성 검사 특성을 갖는 것을 제외하고는 해당 속성이 해당 Foo 속성과 정확히 일치합니다.AutoMapper를 사용할 때 어떻게 사용자 정의 유효성 검사 속성을 건너 뛸 수 있습니까?

public class Foo 
{ 
    string Prop1 { get; set; } 
    string Prop2 { get; set; } 
    string Prop3 { get; set; } 
    string Prop4 { get; set; } 
    string Prop5 { get; set; } 
} 

public class Bar 
{ 
    string Prop1 { get; set; } 
    string Prop2 { get; set; } 

    [CustomValidation]  
    string Prop3 { get; set; } 
} 

이 난 바에 푸를 매핑 AutoMapper를 사용하려면,하지만 난 맵핑이 발생하면 "CustomValidation"속성이 실행되고 싶지 않아.

이 내 매핑 코드와 같은 모습입니다은 ...

  Mapper.Initialize(cfg => cfg.CreateMap<Foo, Bar>(MemberList.None) 
      .ForMember("Prop3", m => m.Ignore())); 

심지어 MemberList.None이 Prop3 특별히 무시에 전달되는과

... 여전히 CustomValidation 속성을 발생합니다.

어떻게 그럴 수 있습니까?

또는 대안은 ...

나는 기본이 아닌 생성자와 CustomValidation 속성을 발사 할 수 있습니까?

이 다소 이상한 질문을 문맥에 넣으십시오. 이 매핑을 수행하는 Controller 메서드를 단위 테스트하려고합니다. CustomValidation 속성은 데이터베이스에 도달하므로 단위 테스트의 속도를 높이기 위해이를 피하고 싶습니다. 나는 CustomHidation 속성을 생성자에서 IoC 컨테이너를 받아들이도록 설정 했으므로 모의 테스트를 통과하고 데이터베이스를 피할 수있게된다. 이는 유효성 검사를 완전히 피하는 완벽한 대체 솔루션이 될 것이다.

답변

0

자동 매퍼는 유효성 검사 속성에 대해 신경 쓰지 않습니다.

실제 유효성 검사를 테스트에서 실행하지 않으려는 경우, 테스트에서 모의 ​​또는 스텁 할 수 있도록 데이터베이스에 저장되는 서비스 또는 저장소를 갖는 것이 유효한 접근 방법이라고 생각합니다.

정말 자동 매퍼가 문제가 아니라고 생각합니다.

+0

사용자 정의 유효성 검사 속성은 이미 IoC 컨테이너를 생성자 매개 변수로 받아 들여 모의 저장소로 단위 테스트 할 수 있습니다. 그것은 내가 단위 검증 속성을 개별적으로 테스트 할 때 잘 동작합니다. 문제는 모델 자체에서 ViewModel에 대한 AutoMapper 매핑을 수행하는 컨트롤러 메서드를 단위 테스트하고 ViewModel에 사용자 지정 유효성 검사 특성이 포함되어 있다는 것입니다. IoC 컨테이너를 컨트롤러와 사용자 지정 특성에 별도로 전달할 수 있지만 AutoMapper를 통해 컨트롤러에서 특성으로 보이지는 않습니다. – spoonraker

+1

자, 이제 알았습니다. 그러나 우리는 분명히, 모델의 가치를 설정하는 검증에 대해 이야기하고 있습니다. 맞지? 맞지? 그렇다면, 어떻게 스터 빙하고 있습니까? 이 코드를 붙여 넣으면 도움이 될 것입니다. –

+0

* ModelState.IsValid –

관련 문제