ドメイン オブジェクトとビューモデルの間のマップを作成して、非常に一般的なユース ケースをサポートしようとしています。解決策が見つからないという事実は、問題へのアプローチが間違っていると思わせます。ソースと宛先のタイプを表す疑似コードを次に示します。
public class DomainClass
{
public NestedDomainClass1 NestedDomainClass1{ get; set; }
}
public class NestedDomainClass1
{
public NestedDomainClass2 NestedDomainClass2 { get; set; }
}
public class NestedDomainClass2
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
public class DomainViewModel
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
}
ご覧のとおり、DomainViewModel
は に完全にマップされDomainClass.NestedDomainClass1.NestedDomainClass2
ます。ただし、完全には関係ない理由により、そのレベルで単純にマッピングを作成することはできません。代わりに、2 レベル高くマッピングする必要があります。
Mapper.CreateMap<DomainObj, DomainViewModel>();
これは残念なことです。これを行うと、AutoMapper の規則に依存して同様の名前のプロパティを自動的にマップすることができなくなり、多くの非常に反復的なコードを記述する必要がなくなります。
Mapper.CreateMap<DomainClass, DomainViewModel>().ForMember(dest=>dest.PropertyA, opt=>opt.MapFrom(source=>source.NestedDomainClass1.NestedDomainClass2.PropertyA));
Mapper.CreateMap<DomainClass, DomainViewModel>().ForMember(dest=>dest.PropertyB, opt=>opt.MapFrom(source=>source.NestedDomainClass1.NestedDomainClass2.PropertyB));
AutoMapper が ( ) からマップしたいプロパティに直接「スキップ」することを期待して、メソッドRecognizeDestinationPrefixes
とメソッドを試してみましたが、うまくいきませんでした。どんな助けでも大歓迎です!RecognizeDestinationPostfixes
NestedDomainClass2