Hallo,
ich übe mich momentan in Auto-Mapper.
Dazu habe ich eine Web-Api Core (.NET 6) mit AutoMapper. Der Mapper soll mir die DB-Models in DTO (und umgekehrt) ausgeben.
Dazu folgendes Model:
Class: Personen
- string: Name,
- string: LastName,
- Address: Address,
- IEnumerable<someType>: SomeType
Class: Address
- string: Street,
- string: Housenumber
- int: zip
Class: SomeType
Zu erwähnen wäre noch, dass ich die Models und DTOs in einem anderen Projekt (Klassenbibliothek) habe. Der Projektverweis ist natürlich vorhanden.
Meine Programm.cs-Datei von der WebApi habe ich folgendermaßen konfiguriert:
//Add Auto-Mapper
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddAutoMapper(Assembly.Load("Projektname.Model"));
var mapperConfig = new MapperConfiguration(mc =>{
mc.AddProfile(new AutoMapperProfile());
});
IMapper mapper = mapperConfig.CreateMapper();
builder.Services.AddSingleton(mapper);
builder.Services.AddMvc();
Meine AutoMapperProfile-Klasse erbt von Profile und sieht wie folgt aus:
CreateMap<Address, Address>().ReverseMap();
CreateMap<SomeType, SomeType>().ReverseMap();
CreateMap<Personen, PersonenDto>()
.ReverseMap()
.ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.AddressDto))
.ForMember(dest => dest.SomeType, opt => opt.MapFrom(src => src.SomeTypeDto))
Zu erwähnen wäre, dass er mir einfache Klassen zwar richtig mappt, sobald aber eine Klasse eine Liste besitzt, wirft er einen Fehler. Die Dokumentation dazu hat mir auch nicht geholen. 🙁