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.

Ответы на вопрос(1)

Ваш ответ на вопрос