Al llamar varias veces a Mapper.CreateMap para el mismo conjunto de origen y destino, nada sucederá ya que Mapper.CreateMap<TSource, TDestination>()
no configura extensiones para una configuración de asignación. Si establece las anulaciones para IMappingExpression como este Mapper.CreateMap<TSource, TDestination>().ConstructUsing(x=>new TDestination(x.SomeField))
, que sí, la configuración para esta asignación se reemplazará por la nueva. En cuanto a la segunda parte de su pregunta, sé que la manera de verificar si el mapa ya fue creado:
public TDestination Resolve<TSource, TDestination>(TSource source)
{
var mapped = Mapper.FindTypeMapFor(typeof(TSource), typeof(TDestination)); //this will give you a reference to existing mapping if it was created or NULL if not
if (mapped == null)
{
var expression = Mapper.CreateMap<TSource, TDestination>();
}
return Mapper.Map<TSource, TDestination>(source);
}
Un poco tarde, pero creo que responde a la pregunta. – Euphoric
¿hay alguna sobrecarga llamándolo una y otra vez? digamos si está en el constructor de una clase? – Baahubali
Respuesta muy tardía, pero para el beneficio de cualquier otra persona que lea, ¡SÍ! Actualmente estoy mirando un informe de rendimiento donde se gasta un 60% de tiempo de CPU llamando a Mapper.CreateMap (con extensiones como la respuesta anterior) – Talonj