| using WIDESEA_Core.Helper; | 
| using WIDESEA_Core.Extensions; | 
| using WIDESEA_Core.Middlewares; | 
| using System.Reflection; | 
| using WIDESEA_Core.Filter; | 
| using Newtonsoft.Json.Converters; | 
| using Newtonsoft.Json.Serialization; | 
| using Newtonsoft.Json; | 
| using System.Text; | 
| using Microsoft.AspNetCore.Mvc.Controllers; | 
| using Microsoft.Extensions.DependencyInjection.Extensions; | 
| using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; | 
| using WIDESEA_Core; | 
| using WIDESEA_Core.BaseServices; | 
| using Autofac.Extensions.DependencyInjection; | 
| using Autofac; | 
| using WIDESEA_WMSServer.Filter; | 
| using WIDESEA_Core.Authorization; | 
| using WIDESEA_Core.Core; | 
| using Swashbuckle.AspNetCore.SwaggerGen; | 
| using Microsoft.OpenApi.Models; | 
| using WIDESEA_StorageTaskServices; | 
|   | 
| var builder = WebApplication.CreateBuilder(args); | 
|   | 
| builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder => | 
| { | 
|     builder.RegisterModule(new AutofacModuleRegister());//´øÓнӿڲãµÄ·þÎñ×¢Èë | 
|     builder.RegisterModule<AutofacPropertityModuleReg>();// | 
| }).ConfigureAppConfiguration((hostingContext, config) => | 
| { | 
|     hostingContext.Configuration.ConfigureApplication(); | 
|     config.Sources.Clear(); | 
|     config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); | 
| }); ; | 
| builder.ConfigureApplication(); | 
|   | 
| // 2¡¢ÅäÖ÷þÎñ | 
| builder.Services.AddSingleton(new AppSettings(builder.Configuration));//×¢²á | 
| builder.Services.AddAllOptionRegister();//¶ÁÈ¡ÅäÖÃÎļþ | 
| builder.Services.AddMemoryCacheSetup();//»º´æ | 
| builder.Services.AddSqlsugarSetup();//SqlSugar Æô¶¯·þÎñ | 
| builder.Services.AddInitializationHostServiceSetup();//Ó¦Óóõʼ»¯·þÎñ×¢Èë | 
| builder.Services.AddDbSetup();//Db Æô¶¯·þÎñ | 
|   | 
| //todo ³õʼ»¯Ä£ÐÍÑéÖ¤ÅäÖà | 
| //builder.Services.UseMethodsModelParameters().UseMethodsGeneralParameters(); | 
| //builder.Services.AddSingleton<IObjectModelValidator>(new NullObjectModelValidator()); | 
|   | 
| builder.Services.AddAutoMapperSetup(); | 
|   | 
| builder.Services.AddCorsSetup(); | 
| builder.Services.AddMiniProfilerSetup(); | 
|   | 
| builder.Services.AddSwaggerSetup(); | 
|   | 
| builder.Services.AddJobSetup();//ÈÎÎñµ÷¶È Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddHttpContextSetup(); | 
|   | 
| //todo | 
| builder.Services.AddMvc(options => | 
| { | 
|     options.Filters.Add(typeof(ApiAuthorizeFilter)); | 
|     //options.Filters.Add(typeof(ActionExecuteFilter)); | 
|     //  options.SuppressAsyncSuffixInActionNames = false; | 
| }); | 
|   | 
| builder.Services.AddAuthorizationSetup(); | 
|   | 
| builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimitÏÞÁ÷ Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddScoped<UseServiceDIAttribute>(); | 
|   | 
| //builder.Services.AddDistributedMemoryCache(); | 
| builder.Services.AddSession(); | 
|   | 
| builder.Services.AddHttpClient(); | 
|   | 
| builder.Services.AddControllers(o => | 
| { | 
|     o.Filters.Add(typeof(GlobalExceptionsFilter));//È«¾ÖÒì³£ | 
|     //todo | 
|     //o.Conventions.Insert(0, new GlobalRoutePrefixFilter(new RouteAttribute(RoutePrefix.Name)));//·ÓÉ | 
| }) | 
| .AddNewtonsoftJson(options => | 
| { | 
|     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; | 
|     //options.SerializerSettings.ContractResolver = new DefaultContractResolver(); | 
|     options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); | 
|     options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; | 
|     options.SerializerSettings.NullValueHandling = NullValueHandling.Include; | 
|     options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; | 
|     options.SerializerSettings.Converters.Add(new StringEnumConverter()); | 
| }); | 
| // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | 
| builder.Services.AddEndpointsApiExplorer(); | 
|   | 
| builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); | 
| Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); | 
|   | 
| builder.Services.AddSwaggerGen(c => | 
| { | 
|     // ÆôÓÃXML×¢½â | 
|     var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; | 
|     var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); | 
|     if (File.Exists(xmlPath)) | 
|     { | 
|         c.IncludeXmlComments(xmlPath); | 
|     } | 
| }); | 
|   | 
| builder.Services.AddHostedService<MyBackgroundService>(); | 
|   | 
|   | 
| var app = builder.Build(); | 
|   | 
| // 3¡¢ÅäÖÃÖмä¼þ | 
| app.UseMiniProfiler();//ÐÔÄÜ·ÖÎöÆ÷ | 
| app.ConfigureApplication();//ÅäÖÃÎļþ | 
| app.UseApplicationSetup();//Æô¶¯ÅäÖà | 
| app.UseSession(); | 
| //if (app.Environment.IsDevelopment()) | 
| //{ | 
|     //todo | 
|     //app.UseSwaggerAuthorized(); | 
|     app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEA_WMSServer.index.html")); | 
| //}//ÅжÏÊÇ·ñÐèÒª´ò¿ªswagger | 
|   | 
| app.UseIpLimitMiddle(); | 
| app.UseApiLogMiddleware(); | 
| //todo | 
| //app.UseRecordAccessLogsMiddle(); | 
|   | 
| app.UseCors(AppSettings.app(new string[] { "Cors", "PolicyName" })); | 
|   | 
| //DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions(); | 
| //defaultFilesOptions.DefaultFileNames.Clear(); | 
| //defaultFilesOptions.DefaultFileNames.Add("index.html"); | 
| //app.UseDefaultFiles(defaultFilesOptions); | 
| app.UseStaticFiles(); | 
| app.UseCookiePolicy(); | 
| app.UseStatusCodePages(); | 
|   | 
| app.UseRouting(); | 
|   | 
|   | 
| app.UseAuthentication(); | 
| app.UseAuthorization(); | 
|   | 
|   | 
| app.MapControllers(); | 
|   | 
| app.Run(); |