wtorek, 24 stycznia 2023

AutoMapper w ASP.NET Core API

 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


2. Tworzymy plik zawierający konfigurację mapowania

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