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.AddMvcCore().AddRazorPages().AddRazorViewEngine().AddViews(); 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.UseCustomSwagger(siteSetting.BaseUrl); //app.UseSwagger(); //app.UseSwaggerUI(); } //app.UseCustomSwagger(siteSetting.BaseUrl); app.UseAuthorization(); app.UseAuthentication(); app.UseCors(x => x .SetIsOriginAllowed(origin => true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); app.UseExceptionHandlerMiddleware(); app.MapCarter(); app.UseStaticFiles(); await app.InitialDb(); app.MapControllers(); app.Run();