2016-12-14 4 views
1

Automapperは新しいオブジェクトを作成せずに正確な値を使用する方法を教えてください。私はrefToSameObject変数がtrue値を持つようにするためにcnf.CreateMap<B, C>();行を変更する必要がありますどのようにAutomapperで新しいオブジェクトを作成せずに正確な値を使用する方法

using System.Collections.Generic; 
using AutoMapper; 

namespace Program 
{ 
    public class A { } 

    public class B 
    { 
     public A Aprop { get; set; } 
    } 

    public class C 
    { 
     public A Aprop { get; set; } 
    } 

    class Program 
    { 
     private static void Main(string[] args) 
     { 
      AutoMapper.Mapper.Initialize(cnf => 
      { 
       // I really need this mapping. Some additional Ignores are present here. 
       cnf.CreateMap<A, A>(); 
       // The next mapping should be configured somehow 
       cnf.CreateMap<B, C>(); //.ForMember(d => d.Aprop, opt => opt.MapFrom(...)) ??? 
      }); 
      A a = new A(); 
      B b = new B() {Aprop = a}; 
      C c = Mapper.Map<C>(b); 
      var refToSameObject = b.Aprop.Equals(c.Aprop); // Evaluates to false 
     } 
    } 
} 

cnf.CreateMap<A, A>();を削除すると、このように動作しますが、私はそれを削除できません。時には、Aクラスを他のAクラスから更新するために使用することがあります。

AutoMapper.Mapper.Initialize(cnf => 
{ 
    cnf.CreateMap<A, A>(); 
    cnf.CreateMap<B, C>() 
     .ConstructUsing(src => new C() { Aprop = src.Aprop }) 
     .ForMember(dest => dest.Aprop, opt => opt.Ignore()); 
}); 

これは動作するはずですし、それは本当にただ一つの特性だと仮定すると、あまりにも痛くないです。この周り

答えて

1

一つの方法は、Cの建設中にConstructUsingを使用してApropを設定することです。

関連する問題