2010-06-07 10 views
5

que tienen un objeto de origen que tiene este aspecto:AutoMapper: Asignar un Enum a su [Descripción] atribuir

private class SourceObject { 
    public Enum1 EnumProp1 { get; set; } 
    public Enum2 EnumProp2 { get; set; } 
} 

Las enumeraciones están decoradas con una costumbre [Description] atributo que proporciona una representación de cadena, y tengo una método de extensión .GetDescription() que lo devuelve. ¿Cómo mapeo estas propiedades enum usando esa extensión?

Estoy intentando asignar a un objeto como éste:

private class DestinationObject { 
    public string Enum1Description { get; set; } 
    public string Enum2Description { get; set; } 
} 

creo un formateador personalizado es mi mejor apuesta, pero no puedo encontrar la manera de añadir el formateador y especificar qué campo para mapear al mismo tiempo.

Respuesta

7

Argh, idiot moment. No se dio cuenta que podía combinar ForMember() y AddFormatter() así:

Mapper.CreateMap<SourceObject, DestinationObject>() 
    .ForMember(x => x.Enum1Desc, opt => opt.MapFrom(x => x.EnumProp1)) 
    .ForMember(x => x.Enum1Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>()) 
    .ForMember(x => x.Enum2Desc, opt => opt.MapFrom(x => x.EnumProp2)) 
    .ForMember(x => x.Enum2Desc, opt => opt.AddFormatter<EnumDescriptionFormatter>()); 

Problema resuelto.

+1

A menos que necesite mapear ambos, también le sugiero que deje los nombres iguales, y simplemente agregue el formateador. Es menos configuración de esa manera. –

+0

Ese es generalmente el enfoque que tomo, a menos que tenga una buena razón de lo contrario. Esto salió de algunas pruebas que estaba haciendo y quería asegurarme de que el caso difícil fuera al menos posible. ¡Gracias! –

+0

Gracias! Tenía el mismo problema, ayudado. – Darius

Cuestiones relacionadas