0

我想为以下类定义一个映射(甚至是 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 会是什么样子?例如

  • 如果映射器从类“Source”映射到“Destination”,则 Destination.EnumProperty 应设置为“undefined” if Source.SourceEnumVal == fu
  • 如果映射器从类“source”映射到“Destination”,则 Destination.EnumProperty 应设置为“oneValue”,如果 Source.SourceEnumVal == “ba”
  • 如果映射器从类“ConcreteSource”映射到“Destination”,则 Destination.EnumProperty 应设置为“oneValue” if ConcreteSource.ConcreteSourceEnumVal == “second”
  • 如果映射器从类“ConcreteSource”映射到“Destination”,则 Destination.EnumProperty 应设置为“undefined” if ConcreteSource.ConcreteSourceEnumVal != “second”
4

1 回答 1

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 根据源类型和目标类型选择要使用的映射,因此无论您使用哪种源类型,都会选择正确的解析器。

于 2010-02-18T18:17:57.567 回答