2011-09-28 8 views
10

tengo el siguiente tipo de fuente:Cómo hacer AutoMapper crear una instancia de la clase

public class Source 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string ZipCode { get; set; } 
} 

tengo los siguientes tipos de destino:

public class Destination 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public Address HomeAddress { get; set; } 
} 

public class Address 
{ 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string PostalCode { get; set; } 
} 

creé un mapeo:

Mapper.CreateMap<Source, Destination>(); 

¿Cómo configuro mi asignación para que cree una instancia de Dirección y asigne la propiedad Address.PostalCode usando t El código fuente de la propiedad de Source?

Respuesta

9

Con AfterMap, puede especificar cómo asignar entidades aún más después de que AutoMapper haya realizado su asignación.

Mapper.CreateMap<Source, Destination>() 
       .AfterMap((src, dest) => 
           { 
            dest.HomeAddress = new Address {PostalCode = src.ZipCode}; 
           } 
      ); 
+0

Intenté esto. No funciona. La expresión 'dest => Convert (dest.Address.PostalCode)' debe resolverse en miembro de nivel superior. – Dismissile

+0

Además, no quiero poner la inicialización en mi constructor porque no siempre deseo crear y Dirección cuando instancia un nuevo Destino, solo cuando hago un mapa desde una Fuente quiero que se cree una Dirección. – Dismissile

+0

@Dismissile, está fallando porque está resolviendo 'Convertir (...)' no 'dest.Address.PostalCode'. Además, al ver los ejemplos aquí: https://github.com/AutoMapper/AutoMapper/wiki/Projection, parece que no es necesario que incluya el constructor vacío, siempre que ambas clases tengan constructores predeterminados. – scottm

Cuestiones relacionadas