AutoMapper używa niewłaściwego konstruktora

Dzisiaj zaktualizowałem w pełni funkcjonalną aplikację za pomocą AutoMapper v1.1, aby teraz korzystać z AutoMapper v2.1 i spotykam się z problemami, których nigdy nie spotkałem w poprzedniej wersji.

Oto przykład mojego odwzorowania koduDto doDomena obiekt

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);

Jednak pierwszym problemem, z którym się spotkałem w wersji 2.1, było to, że AutoMapper próbował użyć konstruktora z 2 argumentami, gdy jeden z argumentów był pusty i powinien używać konstruktora 1 arg.

Następnie spróbowałem użyć

Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());

Ale otrzymałem błąd „Dwuznaczna inwokacja”, którego nie mogłem rozwiązać.

Próbowałem

Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());

i to z powodzeniem utworzyło obiekt TypeOne przy użyciu bezparametrowego konstruktora, ale później nie udało się ustawić właściwości prywatnego setera.

Szukałem pomocy na stronie AutoMapper i pobrałem kod źródłowy, aby dobrze wyglądać, ale nie udało mi się zajść daleko z małą dokumentacją i nie było wielu testów jednostkowych dla ConstructUsing.

Czy jest coś oczywistego, którego brakuje, który powinienem zmienić w wersji 2.1? Jestem zaskoczony, że tak bardzo się zmieniło od wersji 1.1.

questionAnswers(1)

yourAnswerToTheQuestion