2016-04-19 9 views
2

私は次のように私はautomapper使用してBにマッピングするために試したAutomapperマッピングジェネリック型

public class A<T> 
{ 
    public List<T> Results { get; set; } 
    public int PropertyA { get; set; } 
    public int PropertyB { get; set; } 
} 

public class B<T> 
{ 
    public List<T> ResultContent { get; set; } 
    public int PropertyC { get; set; } 
} 

マップする必要が2つのジェネリック型を持っている:

Mapper.CreateMap(typeof(A<>),typeof(B<>)) 
    .ForMember("ResultContent", f => f.MapFrom("Results")) 
    .ForMember("PropertyC", f => f.MapFrom(?????)) 

ResultContentプロパティで正常に動作します。しかし、B.PropertyCはプロパティA.PropertyAとA.PropertyBの合計であるという問題があります。ジェネリック型のプロパティのマッピングを計算することは可能ですか?

答えて

0

このためには、実行する操作を定義するconverterResolveUsing()を使用する必要があります。

詳しくはanswerを参照してください。

+0

私はResolveUsingを使用して試してみたが、やはり私はカスタムリゾルバにジェネリック渡し悩みを持っている: パブリッククラスCustom_Resolver:ValueResolver 、整数> { 保護されたオーバーライドint型ResolveCore( CP) { リターンをcp.PropertyA + cp.PropertyB; 'パブリッククラスCustomResolver :ValueResolver 、整数> { \t保護オーバーライドint型ResolveCore( CP) \t { \t \tリターン } } –

+0

ジェネリック型レゾルバレベルで定義される必要がありますcp.PropertyA + cp.PropertyB; \t} } –

+0

こんにちはTim、 ありがとうございました。ええ、あなたが提案したレゾルバを試しました。リゾルバが:classを期待しているので、リゾルバが期待しているので動作しません。 "Mapper.CreateMap(typeof(A <>)、typeof(B <>)"式はソースタイプがgenericであることを知らない。 .ForMember( "ResultContent"、f => f.MapFrom( "Results")) .ForMember( "PropertyC"、f = > f.ResolveUsing >()))。 私はジェネリッククラスで使用する各タイプごとに複数のマッピングを作成しました。 –

関連する問題