AutoMapper verwenden den falschen Konstruktor
Heute aktualisierte ich eine voll funktionsfähige Anwendung mit AutoMapper v1.1 jetzt AutoMapper v2.1, und ich komme auf einige Fragen, die ich nie begegnet mit der vorherigen version.
Hier ein Beispiel von meinem code-Zuordnung wieder aus Dto zu Domain Objekt
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);
Jedoch das erste problem begegnete ich mit v2.1 war, dass AutoMapper wurde versucht, verwenden Sie den Konstruktor mit 2 args, wenn eines der Argumente null war und sollte mit der 1 arg-Konstruktor.
Dann habe ich versucht, zu verwenden
Mapper.CreateMap<TypeOneDto, TypeOne>().ConstructUsing(x => new TypeOne());
Aber ich habe immer ein 'Mehrdeutig Aufruf' Fehler konnte ich nicht beheben.
Dann habe ich versucht,
Mapper.CreateMap<TypeOneDto, TypeOne>().ConvertUsing(x => new TypeOne());
und hat erfolgreich die TypeOne Objekt über den parameterlosen Konstruktor, aber dann scheiterte es um die private setter-Eigenschaften.
Habe ich mich für die Hilfe auf der AutoMapper website und den Quellcode heruntergeladen haben, gut Aussehen, aber kommt nicht weit mit der kleinen Dokumentation über und es gab nicht viele unit-tests für ConstructUsing.
Ist es etwas offensichtlich, dass ich vermisst werde, dass ich das ändern sollte mit v2.1? Ich bin überrascht, dass es so viel geändert hat von v1.1.
- möglich, Duplikat der Automapper - wie, um anzeigen auf Konstruktor-Parameter, statt der property-setter
- Ich bekomme immer wieder die gleichen Fehler, die ich oben erwähnt, wenn Sie mit "ConstructUsing". "Mehrdeutiger Aufruf" wenn ich ein neues Objekt mit dem parameterlosen Konstruktor.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie nur hinzufügen explicit cast zu
Hier ist der code:
Aktuelle version von AutoMapper funktioniert wie folgt:
Möglichen Ziel-Typ-Konstruktoren, die durch den parameter count
Nimmt den ersten Konstruktor, der die Parameter übereinstimmen-source-Eigenschaften (ohne überprüfung auf null-Wert). In Ihrem Fall ist es den Konstruktor mit zwei Parametern.
Mapper.AssertConfigurationIsValid()
. So können Sie die leere, Probleme frühzeitig auf. Happy coding!