2012-10-16 15 views
5

Używam Automapper. Mam dwie klasy: TypeA z jedną właściwością; TypeB ma dwie właściwości, jedna z nich ma prywatny setter, a wartość dla tej właściwości jest przekazywana przez konstruktor. TypeB nie ma domyślnego konstruktora.Jak przekazywać wartości kontekstowe do mapy Automapper?

Pytanie: czy można skonfigurować Automapper do konwersji TypeA na TypeB.

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 }; 
    } 
} 

Odpowiedz

8

Można użyć jednego z ConstructUsing przeciążeń powiedzieć AutoMapper który konstruktor powinien użyć

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 

Jako rozwiązanie alternatywne można utworzyć TypeB przez strony AutoMapper może wypełnić w pozostałej części właściwości ":

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

Ponieważ mam wszystkie konfiguracje Automapper w oddzielnym miejscu, nie chcę tworzyć nowych Map przed konwersją. Jon jest tym, czego potrzebuję. Dziękuję za Twoją odpowiedź. – Andris

Powiązane problemy