2016-05-25 4 views
0

マッピング継承とTypeConverterを一緒に使用することはできません。Automapper - 継承マッパーがタイプコンバータで動作しません

私はこのコードを持っている:あなたが見ることができるように

/* BaseClassTypeConverter.cs */ 
public class BaseClassTypeConverter : ITypeConverter<SourceClass, BaseClass> { 
    public BaseClass Convert(ResolutionContext context) { 
     if (context == null || context.IsSourceValueNull) 
      return null; 

     var src = (SourceClass)context.SourceValue; 

     return new BaseClass() { 
      CommonAttr = src.SourceAttr 
     }; 
    } 
} 

/* AutoMapperConfig.cs */ 
public static class AutoMapperConfig { 

    public static void RegisterMappings() { 
     AutoMapper.Mapper.Initialize(config => { 
      config 
       .CreateMap<SourceClass, BaseClass>() 
       .Include<SourceClass, DerivedClass1>() 
       .Include<SourceClass, DerivedClass2>() 
       .ForMember(dest => dest.CommonAttr, o => o.MapFrom(src => src.SourceAttr)); 
       //.ConvertUsing<BaseClassTypeConverter>(); // NOT WORKING 

      config 
       .CreateMap<SourceClass, DerivedClass1>() 
       .ForMember(dest => dest.Dummy, o => o.MapFrom(src => src.SourceAttr2)) 
       .IncludeBase<SourceClass, BaseClass>(); 
     }); 
    } 
} 

を、私は私が行うにはいくつかのより複雑な計算を持っているので、ちょうど上記のように値を割り当てる、にTypeConverterクラスからではないマッピングすることができるようにしたいです。

タイプコンバータを使用するとマッピングが機能しませんが、ConvertUsingを削除してForMemberでインラインマッピングを使用するとすべて正常に動作します。

これは私が紛失しているものですか?

PD。私は使用しています:AutoMapper:version = "4.2.1"、targetFramework = "net452"

答えて

2

いいえ、ConvertUsingと他のものを組み合わせることはできません。カスタムタイプコンバータを使用すると、マッピングは完全にあなた次第です。そのため、「ConvertUsing」が「void」を返すのは、「設定が完了しました」というシグナルです。

ただし、ConstructUsingを使用して初期デスティネーションオブジェクトを構築することができます。カスタムAfterMapも継承されています。ただ変換しないでください。

+0

あなたの答えをありがとう! – arosgab

関連する問題