2016-08-30 11 views
1

私のASP.NET MVCアプリケーションでは、あるオブジェクトから別のオブジェクトへマッピングを実行する必要があります。実行時にマッピング設定を行うためのUIがあります。このような機能をサポートするライブラリはありますか?実行時マッピング設定のオートマチック

説明

これが私のアプリケーション内のオブジェクトです。私は何らかの形で、ユーザーがアプリケーション実行中にUIを介してこのオブジェクトのマッピングを設定できるようにする必要があります。ユーザーが数量オーダーOrderDTOのよ​​う地図AMOUTのような簡単な方法でマッピングを定義することができるようになります私のアプリケーション内のページのexmapleいくつかの種類については、後でアプリケーションの再コンパイルを変更せずにexmapleため、このマッピングExactAmmount

ため
//Object in DAL 
public class Order 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public decimal Qty {get; set;} 
    //Lots of other fields 
} 

//Object from XSD generation (for example) 
public class OrderDTO 
{ 
    public int Id {get; set;} 
    public string Description {get; set;} 
    public decimal Ammout {get; set;} 
    public decimal VAT {get; set;} 
    public decimal ExactAmmount {get; set;} 
    //Lots of other fields 
} 
+0

もっと具体的な例がありますか? –

+0

私はそれが可能ではないと思います。 –

答えて

2

注:従来の理由から、私はこの答えを現在の5.xではなくAutoMapper 4.2.1に基づいていました。全体的なアプローチは新しいバージョンと似ているはずです。

プログラム内で異なるマッピング設定と異なるマッパーを作成することは可能です。また、ラムダ式の代わりにメンバー名(string)でメンバーのマッピングを作成することもできます。しかし、いくつかの静的型情報はまだ必要です(私の例がある限り)。これは、異なるソースプロパティタイプをサポートするように拡張することができ

class MemberProfile : Profile 
{ 
    private string from; 
    private string to; 

    public MemberProfile(string from, string to) 
    { 
     this.from = from; 
     this.to = to; 
    } 

    protected override void Configure() 
    { 
     this.CreateMap<Order, OrderDTO>() 
      .ForMember(to, c => c.MapFrom<decimal>(from)); 
    } 
} 

とカスタムマッピングのコレクションの代わりに、単一のもの:

は、プロパティ名に基づいてカスタムマッピングを準備し、プロファイル、次の例を参照してください。 。

使用例:res1について

var order = new Order() { Id = 1, Name = "Test", Qty = 0.5m }; 

var conf1 = new MapperConfiguration(c => c.AddProfile(new MemberProfile("Qty", "Ammout"))); 
var conf2 = new MapperConfiguration(c => c.AddProfile(new MemberProfile("Qty", "ExactAmmount"))); 
var res1 = conf1.CreateMapper().Map<OrderDTO>(order); 
var res2 = conf2.CreateMapper().Map<OrderDTO>(order); 

QtyAmmoutにマッピングされ、res2ため、QtyExactAmmountにマッピングされます。この違いは文字列プロパティ名として記述されているので、ユーザがこの設定に影響を与えるようにすることは可能です。

+1

@NickJones私はあなたが編集に害を及ぼさないことを意味したと確信していますが、それらは私の答えのタイプミスではありませんが、質問のタイプミスを突き止めるために私が行ったのと全く同じです。コードはフリーテキストではないため、スペルはまず機能を尊重する必要があります。 – grek40

関連する問題