Ich habe die folgenden Profile von Automapper 4.2.1 auf 5.0 portiert, was ich in der jetzt veralteten Configure()
Methode im Konstruktor von Profilen verschoben und die Signatur der Convert
Methode in den Ausdrücken.Update AutoMapper auf Version 5.0 macht ITypeConverter und Profile in Konflikt
public class AuthorModelToDtoProfile : Profile
{
public AuthorModelToDtoProfile() {
CreateMap<Author, AuthorDto>()
.ForMember(a => a.AuthorId, o => o.MapFrom(m => m.Id))
.ForMember(a => a.FullName, o => o.MapFrom(m => $"{m.FirstName} {m.Surname}"));
}
}
public class BookModelToDtoProfile : Profile
{
public BookModelToDtoProfile() {
CreateMap<IEnumerable<Genre>, IEnumerable<int>>()
.ConvertUsing(new GenreExpression());
}
}
public class GenreExpression : ITypeConverter<IEnumerable<Genre>, IEnumerable<int>>
{
public IEnumerable<int> Convert(IEnumerable<Genre> source, ResolutionContext context)
=> source.Select(g => g.Id);
}
Jetzt, nach diesen Änderungen führt die folgende Konfiguration ein ArgumentException
, sagte, es nicht einen Ausdruck vom Typ String für einen Parameter vom Typ IEnumerable<Genre>
verwenden:
var mapperConfiguration = new MapperConfiguration(c =>
{
c.AddProfile<BookModelToDtoProfile>();
c.AddProfile<AuthorModelToDtoProfile>();
c.CreateMissingTypeMaps = true;
});
Seltsam, wenn ich einen Kommentar Das eine oder das andere der Profilergänzungen, die Erstellung der Mapper-Konfiguration wirft keine Ausnahme mehr und es mappt korrekt von Author
zu AuthorDto
oder von Book
zu BookDto
, basierend auf was ich kommentiert habe, was mich denken lässt, dass jedes Profil auf seine eigene ich s richtig.
Ich kann die Verwendung der TypeConverter
in der vorgestellten Situation vermeiden, aber ich habe komplexere Ausdrücke, wo die .ConvertUsing(...)
hilft Lesbarkeit und Wartbarkeit meines Codes.
Jeder hatte das gleiche Problem oder kann sehen, was ich falsch mache?