Dziś uaktualniłem w pełni działającą aplikację przy użyciu AutoMapper v1.1, aby teraz używać AutoMapper v2.1 i napotykam na problemy, których nigdy nie spotkałem przy użyciu poprzedniej wersji.AutoMapper używa niewłaściwego konstruktora
Oto przykład mojego mapowania kodu z powrotem Dto do Domain obiektu
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że pierwszy problem jaki napotkaliśmy był z v2.1 że AutoMapper próbował użyć konstruktora z 2 argumentami, gdy jeden z argumentów był zerowy i powinien używać 1 konstruktora arg.
Potem próbował użyć
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Ale ciągle otrzymuję „Niejednoznaczne Invocation” błąd, że nie mogę rozwiązać.
Następnie próbowałem
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
a nie z powodzeniem utworzyć obiekt TypeOne używając konstruktora bez parametrów, ale wtedy nie udało się ustawić właściwości setter prywatnych.
Szukałem pomocy na stronie AutoMappera i ściągnąłem kod źródłowy, aby dobrze się przyjrzeć, ale nie dałem rady z małą dokumentacją i nie było zbyt wielu testów jednostkowych dla ConstructUsing.
Czy brakuje mi czegoś oczywistego, co powinienem zmienić w wersji 2.1? Jestem zaskoczony, że tak bardzo się zmieniło od wersji 1.1.
możliwe duplikat [Automapper - jak mapować do parametrów konstruktora zamiast ustawiaczy mienia] (http://stackoverflow.com/questions/2239143/automapper-how-to-map-to-constructor-parameters- zamiast ustawiania właściwości) –
Ciągle otrzymuję ten sam błąd, o którym wspomniałem powyżej, kiedy używam "ConstructUsing". "Niejednoznaczne wywołanie" podczas tworzenia nowego obiektu z konstruktorem bez parametrów. –