138 lines
3.6 KiB
C#
138 lines
3.6 KiB
C#
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;
|
||
using Microsoft.AspNetCore.Rewrite;
|
||
|
||
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<string>();
|
||
|
||
// Configuraci<63>n del DbContext
|
||
builder.Services.AddDbContext<ModelContext>(options =>
|
||
{
|
||
//IConfiguration configuration = builder.Configuration;
|
||
options.UseOracle(
|
||
ConString,
|
||
options =>
|
||
options.UseOracleSQLCompatibility("11")
|
||
);
|
||
});
|
||
|
||
#endregion
|
||
|
||
|
||
#region Config: RabbitMQ
|
||
|
||
//Get config desde appsettings.json
|
||
builder.Services.Configure<RabbitMQConfig>(builder.Configuration.GetSection("RabbitMQConfig"));
|
||
|
||
builder.Services.AddSingleton<IConnection>(sp =>
|
||
{
|
||
var config = sp.GetRequiredService<IOptions<RabbitMQConfig>>().Value;
|
||
|
||
var factory = new ConnectionFactory
|
||
{
|
||
HostName = config.HostName,
|
||
UserName = config.UserName,
|
||
Password = config.Password,
|
||
Port = config.Port,
|
||
};
|
||
return factory.CreateConnection();
|
||
});
|
||
|
||
builder.Services.AddScoped<IModel>(provider =>
|
||
{
|
||
// Creaci<63>n de channel, declaraci<63>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();
|
||
|
||
var option = new RewriteOptions();
|
||
option.AddRedirect("^$", "swagger");
|
||
app.UseRewriter(option);
|
||
|
||
app.UseAuthorization();
|
||
|
||
app.MapControllers();
|
||
|
||
#endregion
|
||
|
||
using (var scope = app.Services.CreateScope())
|
||
{
|
||
// Inicializar el canal - Crea lo necesario en Rabbit antes de subscribirse
|
||
var channel = scope.ServiceProvider.GetRequiredService<RabbitMQ.Client.IModel>();
|
||
}
|
||
|
||
// Start and Subscribe to RabbitMQ event
|
||
RabbitMQService.ListenForIntegrationEvents(projectName, builder);
|
||
|
||
app.Run(); |