Сегодня я обновил полностью работоспособное приложение, используя AutoMapper v1.1, чтобы теперь использовать AutoMapper v2.1, и я сталкиваюсь с некоторыми проблемами, с которыми я никогда не сталкивался, используя предыдущую версию.AutoMapper с использованием неправильного конструктора
Вот пример моего отображения кода обратно от Dto в домен объекта
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 arg.
Затем я попытался использовать
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Но я продолжал получать ошибку «Неоднозначное Invocation», что я не мог решить.
Затем я попытался
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
и что было успешно создать объект TypeOne с помощью конструктора без параметров, но тогда это не удалось установить личные свойства сеттер.
Я искал помощь на веб-сайте AutoMapper и загрузил исходный код, чтобы иметь хороший внешний вид, но не зашел далеко за небольшую документацию и не было много модульных тестов для ConstructUsing.
Есть ли что-то очевидное, что мне не хватает, что я должен изменить с помощью v2.1? Я удивлен, что он сильно изменился с v1.1.
возможно дубликат [Automapper - как привязать к параметрам конструктор вместо сеттеров свойств] (http://stackoverflow.com/questions/2239143/automapper-how-to-map-to-constructor-parameters- вместо-property-setters) –
Я продолжаю получать ту же ошибку, о которой я упоминал выше при использовании «ConstructUsing». «Неоднозначный вызов», когда я создаю новый объект с конструктором без параметров. –