今日、AutoMapper v1.1 を使用して完全に機能するアプリケーションをアップグレードして、AutoMapper v2.1 を使用するようにしましたが、以前のバージョンでは遭遇しなかったいくつかの問題に遭遇しています。
これは、 DtoからDomainオブジェクトへのコード マッピングの例です。
public class TypeOne
{
public TypeOne()
{
}
public TypeOne(TypeTwo two)
{
//throw ex if two is null
}
public TypeOne(TypeTwo two, TypeThree three)
{
//throw ex if two or three are null
}
public TypeTwo Two {get; private set;}
public TypeThree Three {get; private set;}
}
public class TypeOneDto
{
public TypeOneDto()
{
}
public TypeTwoDto Two {get; set;}
public TypeThreeDto Three {get; set;}
}
...
Mapper.CreateMap<TypeThreeDto, TypeThree>();
Mapper.CreateMap<TypeTwoDto, TypeTwo>();
Mapper.CreateMap<TypeOneDto, TypeOne>();
var typeOne = Mapper.Map<TypeOne>(typeOneDto);
しかし、v2.1 で最初に遭遇した問題は、引数の 1 つが null であり、1 つの引数のコンストラクターを使用する必要がある場合に、AutoMapper が 2 つの引数を持つコンストラクターを使用しようとしていたことでした。
私はそれから使用しようとしました
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
しかし、解決できない「あいまいな呼び出し」エラーが発生し続けました。
私はそれから試しました
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
そして、パラメーターなしのコンストラクターを使用して TypeOne オブジェクトを正常に作成しましたが、プライベート セッター プロパティの設定に失敗しました。
AutoMapper の Web サイトでヘルプを探し、ソース コードをダウンロードして見栄えを良くしましたが、ConstructUsing の単体テストはあまり多くなく、ドキュメントもほとんどありませんでした。
v2.1 で変更する必要がある、明らかに欠けているものはありますか? v1.1からここまで変わったことに驚いています。