AutoMapper utilizando el constructor incorrecto
Hoy actualicé una aplicación que funciona completamente con AutoMapper v1.1 para usar AutoMapper v2.1 y me encuentro con algunos problemas que nunca encontré al usar la versión anterior.
Aquí hay un ejemplo de mi mapeo de código desdeDto aDominio objeto
public class TypeOne
{
public TypeOne()
{
}
public TypeOne(TypeTwo two)
{
//throw ex if two is null
}
public TypeOne(TypeTwo two, TypeThree three)
{
//throw ex if two or three are null
}
public TypeTwo Two {get; private set;}
public TypeThree Three {get; private set;}
}
public class TypeOneDto
{
public TypeOneDto()
{
}
public TypeTwoDto Two {get; set;}
public TypeThreeDto Three {get; set;}
}
...
Mapper.CreateMap<TypeThreeDto, TypeThree>();
Mapper.CreateMap<TypeTwoDto, TypeTwo>();
Mapper.CreateMap<TypeOneDto, TypeOne>();
var typeOne = Mapper.Map<TypeOne>(typeOneDto);
Sin embargo, el primer problema que encontré con v2.1 fue que AutoMapper intentaba usar el constructor con 2 argumentos cuando uno de los argumentos era nulo y debería usar el constructor 1 argumento.
Entonces traté de usar
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Pero seguí recibiendo un error de 'Invocación ambigua' que no pude resolver.
Entonces intenté
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
y eso creó con éxito el objeto TypeOne usando el constructor sin parámetros, pero luego falló en establecer las propiedades del establecedor privado.
Busqué ayuda en el sitio web de AutoMapper y descargué el código fuente para verlo bien, pero no llegué muy lejos con la poca documentación y no hubo muchas pruebas unitarias para la construcción.
¿Hay algo obvio que me esté perdiendo y que debería cambiar con v2.1? Me sorprende que haya cambiado tanto desde v1.1.