でジャストyestardayを働いていない私は、この投稿:今、私はジミー・ボガード@何をやろうとしているAutomapper - 継承マッパー構築物
Automapper - Inheritance mapper not working with type converter
は、残念ながらまだ成功して、彼の答えで述べています。ベースメンバーはマップされません。
ジミーは言った:
しかし、あなたが最初の 先のオブジェクトを構築するためにConstructUsingを使用することができます。カスタムAfterMapも継承されています。ただ 変換しません。
ここに私の新しいコードがあります。
/* BaseClassConstructor.cs */
public class BaseClassConstructor {
public static BaseClass Construct(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>()
.ConstructUsing(s => BaseClassConstructor.Construct(s));
config
.CreateMap<SourceClass, DerivedClass1>()
.ForMember(dest => dest.Dummy, o => o.MapFrom(src => src.SourceAttr2))
.IncludeBase<SourceClass, BaseClass>();
});
}
}
私は何かを見逃しましたか? 私は正しい方法でコンストラクションを使用していますか?
ご協力いただければ幸いです。
達成したいことは何ですか? Mapper.Map(ソース)を動作させるには? –
Evk
はい! @エヴァーク。すべての基本属性が正しくマップされます。 – arosgab
あなたはタイプコンバータを使用する必要がありますか?あなたの例ではあなたは本当にそれを必要としないからです。 – Evk