2016-09-21 10 views
0

私は2つのタイプを持っています。プロパティが「デフォルト」の値に設定されている場合は、ソースインスタンスのプロパティを宛先インスタンスにマッピングすることを無視したいと考えています。既定値が存在する唯一の場所は、型またはコンストラクタの上にあるメタデータの一部です。automapperに、デフォルト値の場合、ソースタイプからマッピングプロパティをスキップする方法を教えてください。

[System.ComponentModel.DefaultValue("")] 
    public string Name { get; set; } 

これを行うにはどうすればよいですか?

+0

I:

ForMember(x => x.Name, x => x.UseValue("Default Value")); 

は、単にタイプのデフォルト値に対してチェックする条件のマッピングを使用して、条件を追加するには例えば

それは反パターンだと思います。なぜなら、マッパはダムになっているはずですから、ログを入れすぎるという誘惑に抵抗したいかもしれませんそれらの内側にic。 –

答えて

0

「ResolveUsing」メソッドを使用して、Reflectionを使用して値を設定できます。 また、 "UseValue"設定方法を使用して、マッピング設定にデフォルト値を配置することもできます。

ForMember(x => x.Name, x => x.ResolveUsing(GetDefaultValueAttributeContent)); 

または::

.ForMember(destination => destination.Name, 
    option => 
    { 
     option.Condition(context => 
     { 
      var src = context.InstanceCache.First().Value as SourceType; 
      return src.Name == default(string); 
     }); 

     option.ResolveUsing(GetDefaultValueAttributeContent); 
    }); 
+0

個別にマップするのではなく、すべてのプロパティに対して一般的に設定する方法はありますか? – sqenixs

+0

技術的にはい...しかし、再びソース値の種類を取得するためにリフレクションを使用する必要があります。これに対してエレガントな解決法はなく、その努力に値するものではないでしょう。 –

関連する問題