AutoMapper использует неправильный конструктор
Сегодня я обновил полнофункциональное приложение, используя AutoMapper v1.1, чтобы теперь использовать AutoMapper v2.1, и я столкнулся с некоторыми проблемами, с которыми я никогда не сталкивался при использовании предыдущей версии.
Вот пример моего отображения кода изDto вDomain объект
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);
Однако первая проблема, с которой я столкнулся в v2.1, заключалась в том, что AutoMapper пытался использовать конструктор с 2 аргументами, когда один из аргументов был нулевым и должен использовать конструктор 1 аргумента.
Затем я попытался использовать
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Но я продолжал получать «Двусмысленный призыв» ошибка, которую я не смог устранить.
Я тогда попробовал
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
и это успешно создало объект TypeOne с помощью конструктора без параметров, но затем он не смог установить свойства частного установщика.
Я искал помощи на веб-сайте AutoMapper и скачал исходный код, чтобы иметь хороший внешний вид, но не ушел далеко с небольшой документацией, и было не так много модульных тестов для ConstructUsing.
Есть ли что-то очевидное, что мне не хватает, что я должен изменить с v2.1? Я удивлен, что так сильно изменился с v1.1.