2017-10-12 5 views
0

저는 Automapper를 과거에 사용한 ValueInjector를 손에 넣으려고합니다. 열거 형 이름 만 다르지만 속성 이름과 값이 같은 열거 형으로 변환하려고합니다. Value Injector를 사용하여 enum을 매핑하는 방법

public enum GenderModel 
    { 
     NotSpecified = 0, 
     Male = 1, 
     Female = 2 
    } 

public enum GenderDto 
    { 
     NotSpecified = 0, 
     Male = 1, 
     Female = 2 
    } 

그럼 내가 DTO 객체의 남성을 얻을 것으로 기대하고이

var model = GenderModel.Male; 
      var dto = GenderDto.NotSpecified; 
      dto.InjectFrom(model); 

처럼지도하는 것을 시도하고 있지만 여전히 NotSpecified로 설정됩니다.

무엇이 누락 되었습니까? 안내해주십시오.

답변

2

내 생각에 ValueInjecterenum, struct, int, double과 같은 값 유형을 매핑 할 수 없습니다. 또는 값 유형에 대한 필요 맵이 없습니다. 이름과 유형이 같은 클래스 유형의 속성 만 매핑하면 도움이됩니다. 서로 다른 종류이기 때문에 열거가 특정 클래스에 중첩되는 경우에, 나는 제안이 예를 들어

var model = GenderModel.Male; 
    var dto = GenderDto.NotSpecified; 
    dto = (GenderDto)model; 

을 열거를 매핑하려면 기본 ValueInjecter은 GenderModelGenderDto를 매핑 할 수 없습니다. 그래서 우리는 고객 ValueInjecter에 의해 그것을 구현할 수 있습니다. 이것은 여기에 내 테스트 코드, 도움이되기를 바랍니다.

public enum GenderModel 
{ 
    NotSpecified = 0, 
    Male = 1, 
    Female = 2 
} 

public enum GenderDto 
{ 
    NotSpecified = 0, 
    Male = 1, 
    Female = 2 
} 

public class Person1 
{ 
    public GenderModel Gender { get; set; } 
} 

public class Person2 
{ 
    public GenderDto Gender { get; set; } 
} 

public class EnumMapInjection:IValueInjection 
{ 
    public object Map(object source, object target) 
    { 
     StaticValueInjecter.DefaultInjection.Map(source, target); 
     if (target is Person2 && source is Person1) 
     { 
      ((Person2) target).Gender = (GenderDto)((Person1) source).Gender; 
     } 
     return target; 
    } 
} 

그리고 주요 기능 코드 :

static void Main(string[] args) 
    { 
     var person1 = new Person1(){Gender = GenderModel.Male}; 
     var person2 = new Person2(){Gender = GenderDto.Female}; 
     person2.InjectFrom<EnumMapInjection>(person1); 
    } 
+0

예 그러나이 열거 형은 사람 클래스에 중첩되어있는 경우 상상 내가 목록을 얻고있다 사람을 DTO 목록에 매핑하려고합니다. ValueInjecter를 사용하여 매핑을 정의 할 수 없다면 목록을 반복하고 열거 형을 수동으로 매핑해야합니다. –

+0

이 경우, IValueInjection에서 상속받은 고객 삽입을 제안합니다. 나는 당신에게 나의 대답의 모범을 줄 수있다. – Renshaw

+0

완벽하게 완료되었습니다. 감사합니다. –

0

타입 캐스팅 솔루션

dto = (GenderDto)model;