我想为以下类定义映射(甚至是TypeConverter / Resolver): 目的地:
public class Destination
{
public DestinationEnum EnumProperty { get; set; }
public Destination()
{
EnumProperty = DestinationEnum.undefined;
}
}
public enum DestinationEnum
{
oneValue,
anotherValue,
undefined
}
来源:
public enum SourceEnum
{
fu,
ba
}
public enum AnotherSourceEnum
{
first,
second,
third
}
public class Source
{
public SourceEnum SourceEnumVal { get; set; }
}
public class ConcreteSource : Source
{
public AnotherSourceEnum ConcreteSourceEnumVal { get; set; }
}
如果我想根据具体的源类型在Destination类中指定DestinationEnum的目标值,那么AutoMapper Mapping会是什么样子? 例如。
答案 0 :(得分:5)
您将创建两个地图:
Mapper.CreateMap<Source, Destination>();
Mapper.CreateMap<ConcreteSource, Destination>();
然后为每张地图做一个自定义解析器:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.EnumProperty, opt => opt.ResolveUsing<FirstResolver>());
您的第二个ConcreteSource地图将使用不同的解析器:
Mapper.CreateMap<ConcreteSource, Destination>()
.ForMember(dest => dest.EnumProperty, opt => opt.ResolveUsing<SecondResolver>());
AutoMapper根据源类型和目标类型选择要使用的映射,因此无论您使用哪种源类型,都将选择正确的解析器。