2012-10-16 21 views
5

Automapper'ı kullanıyorum. İki sınıfım var: Tek özellikli TypeA; İki özelliği olan TypeB, bunlardan biri özel belirleyici ve bu özellik için değer yapıcı aracılığıyla iletilir. TypeB'nin varsayılan kurucusu yok.İçerik değerleri Automapper Map'e nasıl aktarılır?

Soru: Automapper'ın TypeA'yı TypeB'ye dönüştürmesi yapılandırılabilir.

public class TypeA 
{ 
    public string Property1 { get; set; } 
} 

public class TypeB 
{ 
    public TypeB(int contextId) 
    { ContextId = contextId; } 

    public string Property1 { get; set; } 

    public int ContextId { get; private set; } 
} 

public class Context 
{ 
    private int _id; 

    public void SomeMethod() 
    { 
     TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 

     // How to configure Automapper so, that it uses constructor of TypeB 
     // and passes "_id" field value into this constructor? 

     // Not work, since "contextId" must be passed to constructor of TypeB 
     TypeB instanceOfB = Mapper.Map<TypeB>(instanceOfA); 

     // Goal is to create folowing object 
     instanceOfB = new TypeB(_id) { Property1 = instanceOfA.Property1 }; 
    } 
} 

cevap

8

Bunu AutoMapper geri kalanında doldurabilir elle senin TypeB oluşturabilir alternatif çözüm olarak

TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 
_id = 3;    

Mapper.CreateMap<TypeA, TypeB>().ConstructUsing((TypeA a) => new TypeB(_id));  
TypeB instanceOfB = Mapper.Map<TypeB>(instanceOfA); 

// instanceOfB.Property1 will be "Some string" 
// instanceOfB.ContextId will be 3 

kullanmalıdır hangi yapıcı AutoMapper anlatmak için ConstructUsing aşırı birini kullanabilirsiniz özellikleri ":

TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 
_id = 3;    

Mapper.CreateMap<TypeA, TypeB>(); 

TypeB instanceOfB = new TypeB(_id); 
Mapper.Map<TypeA, TypeB>(instanceOfA, instanceOfB); 

// instanceOfB.Property1 will be "Some string" 
// instanceOfB.ContextId will be 3 
+1

Otomatik biçimlendiricinin tüm yapılandırmalarını ayrı bir yerde kullandığım için, dönüştürmeden önce yeni Haritalar oluşturmak istemiyorum. İhtiyacım olan şey iyon. Cevabınız için teşekkür ederim. – Andris