Lanza un error/advertencia cuando CreateMap ya está definido.
El otro día estuve luchando con una propiedad no mapeada usando AutoMapper.
Después de investigar la aplicación, resultó que ya existía una CreateMap<s, t=””> definida que estaba sobrescribiendo (o leyendo primero) la que estaba tratando de configurar.
La situación se ve así:
public MainProfile()
{
CreateMap<class1, class2=””>()
.ForMember(x => x.Property1, opt => opt.MapFrom(s => s.Property1Foo))
.ForMember(x => x.Property2, opt => opt.MapFrom(s => s.Property2Foo)); /¡Aquí está el problema!/
}
Y luego había otra clase que hace lo siguiente:
public SecondaryProfile()
{
CreateMap<class1, class2=””>()
.ForMember(x => x.Property1, opt => opt.MapFrom(s => s.Property1Foo));
}
En mi caso, cuando hice:
var class2Object = mapper.Map
Se está utilizando la definición de SecondaryProfile.cs en lugar de MainProfile.cs, por lo que Property2 no se está mapeando.
Esto no te muestra ninguna advertencia, ningún error y también se compila sin problemas. Además, esto puede introducir un error difícil de encontrar, así que me pregunto cómo puedo evitar esta situación.
¿Hay alguna configuración que se pueda hacer para que AutoMapper te advierta sobre esto?</class1,></class1,></s,>
davy.ai
Una forma de evitar esta situación es dar a cada
CreateMap
un nombre único utilizando la claseProfile
. Por ejemplo:Luego, en tu código de inicio, puedes agregar los perfiles a tu configuración de la siguiente manera:
Ahora, si intentas definir el mismo
CreateMap
más de una vez, AutoMapper lanzará unaAutoMapperConfigurationException
, que te advertirá del problema.</class1,></class1,>