Hola, anteriormente hicimos una introducción a AutoMapper, vimos algunos conceptos básicos para rápidamente ponernos a tono con dicha herramienta y finalmente comente algunas características importantes y muy comúnmente utilizadas, y como podrán adivinar quedaron algunos temas por fuera, así que en esta oportunidad vamos a revisar una de ellas, los Value Resolver.

En esencia podemos crear un Value Resolver personalizado para especificar un mapeo diferente al por defecto (propiedad origen a propiedad destino) para cumplir con necesidades específicas, así que en esta oportunidad vamos a personalizar la asignación a la propiedad Name de la clase ClientViewModel. Así que vamos a cambiar un poco la clase ClientViewModel, donde eliminamos la propiedad LastName, así nuestra clase ahora solo tiene dos propiedades, Name y Email:

public class ClientViewModel { public string Name { get; set; } public string Email { get; set; } }

La concatenar las propiedades Name y LastName de la clase Cliente y ese valor será el asignado para el Name de ClientViewModel, así que vamos a crear un Value Resolver que nos ayude con esa tarea, crear un Value Resolver personalizado es tan simple como tener una clase que herede de ValueResolver y sobre-escribir el método ResolveCore. Así que creamos una clase llamada FullNameResolver que hereda de ValueResolver y definimos el source (la clase cliente original) y el tipo de la salida (un string en este caso), y en el override del método ResolveCore simplemente concatenamos las propiedades y retornamos el valor:

public class FullNameResolver : ValueResolver { protected override string ResolveCore(Client source) { return string.Format("{0} {1}",source.Name, source.LastName); } }

Ya que se ha creado el resolver, solo resta usarlo, así que vamos a nuestra clase CustomDto y allí en el método Configure en la definición del mapeo de la propiedad Name llamamos el resolver creado con la función ResolveUsing y le pasamos el FullNameResolver creado anteriormente:

protected override void Configure() { Mapper.CreateMap() .ForMember(d => d.Name, o => o.ResolveUsing()) .ForMember(d => d.Email, o => o.MapFrom(c => c.Email)); }

Por último una prueba:

ValueResolver

Hasta la próxima, saludos!