2010-10-13 13 views
5

¿Cómo puedo anular el convertidor de tipo que utiliza AutoMapper para una propiedad determinada?Cómo especificar un convertidor de tipo específico para una propiedad determinada usando AutoMapper

Por ejemplo, si tengo:

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

public class Bar 
{ 
    public string Name { get; set; } 
} 

Ahora simplemente desea asignar a Foo.Name Bar.Name pero utilizando un convertidor tipo especificado. Veo cómo puedo hacerlo usando:

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.ResolveUsing<FooNameResolver>()); 

Pero esto codifica la conversión para usar la propiedad Name en Foo. Si tengo el mismo tipo de conversión en otras propiedades en esta u otras clases, tengo que crear una clase de resolución para cada una.

Y no quiero especificar un convertidor para cadena -> cadena ya que esta conversión es específica de esta propiedad u otras similares.

¡Solo quiero anular el convertidor de tipos! Estoy seguro que esto debe ser posible, pero estoy ciega en él :-(

estoy después de algo como esto:.

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.Using<MySpecialStringConverter>()); 

Respuesta

7

descubrí la respuesta lectura a través de las pruebas unitarias para AutoMapper Es no es muy obvio, a pesar de la interfaz fluida, porque muchos de los métodos sobre las opciones de asignación volverá vacía sin embargo, ResolveUsing<>() no vuelve nula, pero le permite especificar opciones adicionales Aquí está la solución:..

Mapper 
    .CreateMap<Source,Dest> 
    .ForMember(dest => dest.Name, 
       opt => opt.ResolveUsing<MySpecialStringConverter>() 
          .FromMember(source => source.Name)); 

I preferiría no tener que especificar el .FromMember cuando la propiedad es el valor predeterminado que usaría AutoMapper de todos modos y todo lo que deseo utilizar es anular el tipo convertidor/resolver.

Cuestiones relacionadas