2011-06-15 24 views
10

¿Qué sucede cuando llamo a Mapper.CreateMap con los mismos tipos varias veces?Automapper - CreateMap llamado varias veces

¿Reescribe el mapa anterior? Si es así, ¿es posible hacer que arroje una excepción si intento crear un mapa, que ya está creado?

Respuesta

22

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); 
} 
+0

Un poco tarde, pero creo que responde a la pregunta. – Euphoric

+5

¿hay alguna sobrecarga llamándolo una y otra vez? digamos si está en el constructor de una clase? – Baahubali

+1

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

Cuestiones relacionadas