2011-01-19 20 views
13

He estado revisando la documentación de AutoMapper para intentar encontrar una solución recomendada pero no he podido encontrarla.Asignar una propiedad a un elemento de colección

Digamos que tengo una clase como la siguiente

public class Foo 
{ 
    public string Note { get; set; } 
} 

esta clase se rellena desde el cliente y se asigna a la clase de objeto siguientes dominio

public class Bar 
{ 
    public IList<Note> Notes { get; set; } 
} 

donde Note es

public class Note 
{ 
    public string Text { get; set; } 

    // other properties excluded for brevity 
} 

Me gustaría asignar la propiedad de cadena Note en Foo, en primer lugar a la propiedad Text en una nueva instancia de Note y luego añada Note a la colección en Bar. Estoy usando un ValueResolver para realizar la primera parte de esta operación (mapeo de la cadena a una nueva instancia de Note), pero no estoy seguro acerca de cómo proceder con la segunda parte (asignar ese elemento a un elemento en una colección).

¿Cuál es la forma más limpia de hacer esto?

Respuesta

39

Estoy pensando en algo como esto debería funcionar (no probado - sólo escribir en voz alta):

Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes, 
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } }); 

EDITAR

También es posible usar AutoMappers AfterMap funcionalidad. Esta lambda se ejecutará después de que Automapper haya realizado sus asignaciones regulares:

.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note })); 
+0

La barra es un objeto de dominio poblado de una fuente de datos. Creo que esto se encargará de mapear a una nueva instancia de objeto de dominio, pero ¿manejará el caso donde el objeto de dominio se rellena desde el origen de datos y puede que ya contenga elementos en la colección y me gustaría agregar un elemento a esa colección? –

+0

Edité mi respuesta con una opción para usar AfterMap. Alternativamente, puede usar un convertidor de tipo personalizado si las cosas se vuelven demasiado complicadas: http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters – PatrickSteele

+2

The Map After funcionó bien, muchas gracias por apuntarme en la dirección correcta :) –

Cuestiones relacionadas