Come inserisco la configurazione di AutoMapper nel mio modello di servizio

Come inserisco la configurazione di AutoMapper nel mio modello di servizio

La soluzione per Come iniettare la configurazione di AutoMapper nel mio modello di servizio
è riportata di seguito:

Ho una riga nella mia API Asp.Net Core Startup.cs :

services.AddAutoMapper(Assembly.GetExecutingAssembly());

Con questo posso usare _mapper.Map perché lo inietto nel mio modello di servizio. Sto cercando di convertire per utilizzare .ProjectTo() . Vuole un MapperConfiguration . Come faccio a iniettarlo in modo da non doverlo creare in tutti i metodi?

Il mio metodo attuale:

    public async Task<IEnumerable<EcommerceItemDto>> GetAllItemsUsingProjectToAsync(string customerNumber, string category = "All",
        int page = 0, int pageSize = 9999)
    {
        IQueryable<Category> categories;

        if (category == "All")
        {
            categories = _context.Categories
                .Include(c => c.Children)
                .Include(p => p.Parent)
                .AsNoTrackingWithIdentityResolution();
        }
        else
        {
            categories = _context.Categories
                .Where(n => n.Name == category)
                .Include(c => c.Children)
                .Include(p => p.Parent)
                .AsNoTrackingWithIdentityResolution();
        }

        var configuration = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<EcommerceItem, EcommerceItemDto>();
                cfg.CreateMap<EcommerceItemImages, EcommerceItemImagesDto>();
                cfg.CreateMap<Category, CategoryDto>();
            });

        var dto = await _context.EcommerceItems
            .FromSqlInterpolated($"SELECT * FROM [cp].[GetEcommerceItemsView] WHERE [CustomerNumber] = {customerNumber}")
            .Include(x => x.Category)
            .Include(i => i.Images.OrderByDescending(d => d.Default))
            .OrderBy(i => i.ItemNumber)
            .Where(c => categories.Any(x => x.Children.Contains(c.Category)) || categories.Contains(c.Category))
            .Skip(page * pageSize)
            .Take(pageSize)
            .AsNoTracking()
            .ProjectTo<EcommerceItemDto>(configuration)
            .ToListAsync();

        return dto;
    }

Per cominciare, ti suggerisco di utilizzare i file di profilo per configurare le tue mappature

public class SampleProfile : Profile
{
    public OrganizationProfile()
    {
        CreateMap<Foo, FooDto>();
        
    }
}

E poi usando la volta che fornisci l'Assemblea usando il IServiceCollection.AddAutoMapper() metodo di estensione, eseguirà la scansione dell'assembly e recupererà le configurazioni dai file di profilo.

services.AddAutoMapper(Assembly.GetExecutingAssembly());

Più documentazione qui e Pacchetto Github

Il file di profilo aiuta anche a organizzare le configurazioni di mappatura in un modo migliore (nei propri file, piuttosto che mescolare le cose).

Ora puoi usare

var orders = await dbContext.EcommerceItems
                       // rest of query
                       .ProjectTo<EcommerceItemDto>(_mapper.ConfigurationProvider)
                       .ToListAsync();