AutoMapper usando o construtor errado
Hoje eu atualizei um aplicativo totalmente funcional usando o AutoMapper v1.1 para agora usar o AutoMapper v2.1 e estou me deparando com alguns problemas que nunca encontrei usando a versão anterior.
Aqui está um exemplo do meu mapeamento de código de voltaDto paraDomínio 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);
No entanto, o primeiro problema que encontrei com a v2.1 foi que o AutoMapper estava tentando usar o construtor com 2 args quando um dos argumentos era nulo e deveria estar usando o construtor 1 arg.
Eu então tentei usar
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Mas continuei recebendo um erro de "Invocação ambígua" que não consegui resolver.
Eu então tentei
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
e isso criou com sucesso o objeto TypeOne usando o construtor sem parâmetros, mas não definiu as propriedades do setter privado.
Procurei ajuda no site do AutoMapper e baixei o código-fonte para dar uma boa olhada, mas não fui longe com a pouca documentação e não havia muitos testes de unidade para o ConstructUsing.
Existe alguma coisa óbvia que eu estou sentindo falta que eu deveria mudar com a versão 2.1? Estou surpreso que isso tenha mudado muito da v1.1.