using AspNetCoreRateLimit; using FluentValidation; using FluentValidation.AspNetCore; using MediatR; using ProdutoAPI.Models; using ProdutoAPI.Repositories; using ProdutoAPI.Repositories.Interfaces; using System.Reflection; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Configuração do Rate Limiting builder.Services.AddMemoryCache(); builder.Services.Configure(builder.Configuration.GetSection("IpRateLimiting")); builder.Services.Configure(builder.Configuration.GetSection("IpRateLimitPolicies")); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddInMemoryRateLimiting(); // Configuração do FluentValidation builder.Services.AddFluentValidationAutoValidation(); builder.Services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly()); // Configuração do MediatR builder.Services.AddMediatR(Assembly.GetExecutingAssembly()); // Configuração dos Repositórios builder.Services.AddSingleton(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseSwagger(); app.UseSwaggerUI(); app.UseIpRateLimiting(); app.UseAuthorization(); app.MapControllers(); app.Run();