Mapowanie klas modelu do obiektów DTO można zautomatyzować przy pomocy np. AutoMappera. Sama biblioteka nie jest już nowością na rynku i liczy sobie ponad 10 lat. Integracja z ASP.NET Core API jest bardzo prosta. Poniżej instrukcja:
1. Instalujemy dwie paczki:
- AutoMapper
- AutoMapper.Extensions.Microsoft.DependencyInjection
using AutoMapper; using BookStoreApi.Models; using BookStoreApi.Models.Dto; namespace BookStoreApi; public class MappingConfiguration : Profile { public MappingConfiguration() { CreateMap<Book, BookDto>().ReverseMap(); } }
Metoda ReverseMap() pozwala na konfigurację mapowania zarówno z typu Book na BookDto jak i z obiektu BookDto na Book. Jeżeli nie potrzebujemy konwersji w drugą stronę możemy pominąć jej wywołanie.
3. W pliku Program.cs dodajemy do kontenera DI AutoMapper:
builder.Services.AddAutoMapper(typeof(MappingConfiguration));
4. Ostatnim krokiem jest wstrzyknięcie interfejsu IMapper do kontrolera i użycie metody Map. Przykład:
[ApiController] [Route("api/[controller]")] public class BookStoreController : ControllerBase { private readonly BookStoreDbContext _bookStoreDbContext; private readonly IMapper _mapper; public BookStoreController(BookStoreDbContext bookStoreDbContext, IMapper mapper) { _bookStoreDbContext = bookStoreDbContext; _mapper = mapper; } [HttpGet] public async Task<ActionResult<IEnumerable<BookDto>>> GetBooks() { return Ok(_mapper.Map<List<BookDto>>(await _bookStoreDbContext.Books.ToListAsync())); } }
Rezultat po uruchomieniu aplikacji będzie następujący:
Brak komentarzy:
Prześlij komentarz