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