¿Cómo inyecto la configuración de AutoMapper en mi modelo de servicio?

¿Cómo inyecto la configuración de AutoMapper en mi modelo de servicio?

La solución para ¿Cómo inyecto la configuración de AutoMapper en mi modelo de servicio?
se proporciona a continuación:

Tengo una línea en mi Asp.Net Core API Startup.cs :

services.AddAutoMapper(Assembly.GetExecutingAssembly());

Con esto puedo usar _mapper.Map porque lo inyecto en mi modelo de Servicio. Estoy tratando de convertir para usar .ProjectTo() . Quiere un MapperConfiguration . ¿Cómo lo inyecto para no tener que crearlo en todos los métodos?

Mi método actual:

    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;
    }

Para empezar, le sugiero que use archivos de perfil para configurar sus asignaciones

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

Y luego usando el una vez que proporcione la Asamblea usando el IServiceCollection.AddAutoMapper() método de extensión, escanearía a través del ensamblaje y recuperaría las configuraciones de los archivos de perfil.

services.AddAutoMapper(Assembly.GetExecutingAssembly());

Más documentación aquí y Package Github

El archivo de perfil también ayuda a organizar las configuraciones de mapeo de una mejor manera (en archivos propios, en lugar de mezclar cosas).

Ahora podrías usar

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