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; }
    }

具体的な Source Type に応じて Destination クラスの DestinationEnum の宛先値を指定したい場合、AutoMapper マッピングはどのようになりますか? 例えば

  • マッパーがクラス "Source" から "Destination" にマップする場合、Source.SourceEnumVal == fu の場合、Destination.EnumProperty を "undefined" に設定する必要があります。
  • マッパーがクラス "source" から "Destination" にマップする場合、Source.SourceEnumVal == "ba" の場合、Destination.EnumProperty を "oneValue" に設定する必要があります。
  • マッパーがクラス "ConcreteSource" から "Destination" にマップする場合、ConcreteSource.ConcreteSourceEnumVal == "second" の場合、Destination.EnumProperty を "oneValue" に設定する必要があります。
  • マッパーがクラス "ConcreteSource" から "Destination" にマップする場合、ConcreteSource.ConcreteSourceEnumVal != "second" の場合、Destination.EnumProperty を "undefined" に設定する必要があります
4

1 に答える 1

5

次の 2 つのマップを作成します。

Mapper.CreateMap<Source, Destination>();
Mapper.CreateMap<ConcreteSource, Destination>();

次に、マップごとにカスタム リゾルバーを実行します。

Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.EnumProperty, opt => opt.ResolveUsing<FirstResolver>());

2 番目の ConcreteSource マップは、別のリゾルバーを使用します。

Mapper.CreateMap<ConcreteSource, Destination>()
    .ForMember(dest => dest.EnumProperty, opt => opt.ResolveUsing<SecondResolver>());

AutoMapper は、ソースと宛先の両方のタイプに基づいて使用するマッピングを選択するため、使用するソースのタイプに関係なく、正しいリゾルバーが選択されます。

于 2010-02-18T18:17:57.567 に答える