내 생각에 ValueInjecter
은 enum, struct, int, double
과 같은 값 유형을 매핑 할 수 없습니다. 또는 값 유형에 대한 필요 맵이 없습니다. 이름과 유형이 같은 클래스 유형의 속성 만 매핑하면 도움이됩니다. 서로 다른 종류이기 때문에 열거가 특정 클래스에 중첩되는 경우에, 나는 제안이 예를 들어
var model = GenderModel.Male;
var dto = GenderDto.NotSpecified;
dto = (GenderDto)model;
을 열거를 매핑하려면 기본 ValueInjecter은 GenderModel
및 GenderDto
를 매핑 할 수 없습니다. 그래서 우리는 고객 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);
}
예 그러나이 열거 형은 사람 클래스에 중첩되어있는 경우 상상 내가 목록을 얻고있다 사람을 DTO 목록에 매핑하려고합니다. ValueInjecter를 사용하여 매핑을 정의 할 수 없다면 목록을 반복하고 열거 형을 수동으로 매핑해야합니다. –
이 경우, IValueInjection에서 상속받은 고객 삽입을 제안합니다. 나는 당신에게 나의 대답의 모범을 줄 수있다. – Renshaw
완벽하게 완료되었습니다. 감사합니다. –