using MSAdminUsuarios.Context; using Microsoft.EntityFrameworkCore; using Security; using System.Reflection; using MSAdminUsuarios.Models; using Microsoft.Extensions.Options; using RabbitMQ.Client; using MSAdminUsuarios.Utils; using RabbitMQ.Client.Events; var builder = WebApplication.CreateBuilder(args); var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); #region Logging // Add logging configuration builder.Logging.ClearProviders(); builder.Logging.AddConsole(); builder.Logging.AddDebug(); var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog()); #warning Cuidado! NO cambiar nombre del proyecto! 19/03/23 -LM string projectName = Assembly.GetEntryAssembly()?.GetName().Name ?? "MSAdminUsuarios"; var logger = loggerFactory.CreateLogger(projectName); #endregion #region Config: Base de Datos // Cadena de Conexion a Bases de Datos var ConString = builder.Configuration.GetSection("ConnectionStrings:ConString").Get(); // Configuración del DbContext builder.Services.AddDbContext(options => { //IConfiguration configuration = builder.Configuration; options.UseOracle( ConString, options => options.UseOracleSQLCompatibility("11") ); }); #endregion #region Config: RabbitMQ //Get config desde appsettings.json builder.Services.Configure(builder.Configuration.GetSection("RabbitMQConfig")); builder.Services.AddSingleton(sp => { var config = sp.GetRequiredService>().Value; var factory = new ConnectionFactory { HostName = config.HostName, UserName = config.UserName, Password = config.Password }; return factory.CreateConnection(); }); builder.Services.AddScoped(provider => { // Creación de channel, declaración de queues y binding return RabbitMQService.GetRabbitMQChannel(provider, projectName); }); #endregion #region Config: Cors // Enable Cors builder.Services.AddCors(options => { options.AddPolicy(name: "widthoutCors", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); #endregion #region Mapping / Build var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment() || app.Environment.IsProduction()) { app.UseSwagger(); app.UseSwaggerUI(); app.UseCors("widthoutCors"); } if(app.Environment.IsDevelopment()) { Environment.SetEnvironmentVariable("Mode", "Dev"); } else { Environment.SetEnvironmentVariable("Mode", "Prod"); } // app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); #endregion // Start and Subscribe to RabbitMQ event RabbitMQService.ListenForIntegrationEvents(projectName, builder); app.Run();