using Brizco.Api.WebFramework.Configurations; using Brizco.Api.WebFramework.Swagger; using Brizco.Common.Models; using Brizco.Core; using Brizco.Domain; using Brizco.Domain.Models.Settings; using Brizco.Infrastructure; using Brizco.Repository; using System.Configuration; using Carter; using FluentValidation; using MediatR.Extensions.Autofac.DependencyInjection; using MediatR.Extensions.Autofac.DependencyInjection.Builder; var builder = WebApplication.CreateBuilder(args); builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.UseSerilog(); LoggerConfig.ConfigureSerilog(); string env = builder.Environment.IsDevelopment() == true ? "Development" : "Production"; builder.Host.UseContentRoot(Directory.GetCurrentDirectory()); if (builder.Environment.IsDevelopment()) builder.Configuration .AddJsonFile($"AppSettings/appsettings.json") .AddJsonFile($"AppSettings/appsettings.{env}.json"); if (builder.Environment.IsProduction()) builder.Configuration .AddJsonFile($"AppSettings/Production/appsettings.{env}.json"); var configuration = builder.Configuration; var siteSetting = configuration.GetSection(nameof(SiteSettings)).Get(); builder.Services.Configure(configuration.GetSection(nameof(SiteSettings))); // 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.AddCustomSwagger(siteSetting.BaseUrl); builder.Services.AddCustomApiVersioning(); builder.Services.AddCustomController(); builder.Services.AddControllers(); builder.Services.AddCustomResponseCompression(); builder.Services.AddValidatorsFromAssembly(typeof(RepositoryConfig).Assembly, includeInternalTypes: true); builder.Services.AddCustomMvc(); builder.Services.AddCustomAuthorization(); builder.Services.AddJwtCustomAuthentication(siteSetting.JwtSettings); builder.Services.AddCustomIdentity(); builder.Services.AddCustomDbContext(configuration); builder.Services.AddCarter(); builder.Host.ConfigureContainer(builder => { var assembly = typeof(CoreConfig).Assembly; builder .RegisterAssemblyTypes(assembly) .AssignableTo() .AsImplementedInterfaces() .InstancePerLifetimeScope(); var assemblyB = typeof(InfrastructureConfig).Assembly; builder.RegisterAssemblyTypes(assemblyB) .AssignableTo() .AsImplementedInterfaces() .InstancePerLifetimeScope(); var assemblyC = typeof(RepositoryConfig).Assembly; builder.RegisterAssemblyTypes(assemblyC) .AssignableTo() .AsImplementedInterfaces() .InstancePerLifetimeScope(); var assemblyD = typeof(Program).Assembly; builder.RegisterAssemblyTypes(assemblyD) .AssignableTo() .AsImplementedInterfaces() .InstancePerLifetimeScope(); builder.RegisterMediatR(MediatRConfigurationBuilder .Create(typeof(RepositoryConfig).Assembly) .WithAllOpenGenericHandlerTypesRegistered() .Build()); builder.RegisterMediatR(MediatRConfigurationBuilder .Create(typeof(DomainConfig).Assembly) .WithAllOpenGenericHandlerTypesRegistered() .Build()); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseAuthorization(); app.UseCors(x => x .SetIsOriginAllowed(origin => true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); app.UseExceptionHandlerMiddleware(); app.UseCustomSwagger(siteSetting.BaseUrl); app.MapCarter(); app.UseStaticFiles(); await app.InitialDb(); app.MapControllers(); app.Run();