| using Autofac; | 
| using Autofac.Extensions.DependencyInjection; | 
| using Microsoft.AspNetCore.Mvc.Controllers; | 
| using Microsoft.AspNetCore.SignalR; | 
| using Microsoft.Extensions.DependencyInjection.Extensions; | 
| using Newtonsoft.Json; | 
| using Newtonsoft.Json.Converters; | 
| using System.Reflection; | 
| using System.Text; | 
| using WIDESEAWCS_Core; | 
| using WIDESEAWCS_Core.Authorization; | 
| using WIDESEAWCS_Core.Core; | 
| using WIDESEAWCS_Core.Extensions; | 
| using WIDESEAWCS_Core.Filter; | 
| using WIDESEAWCS_Core.Helper; | 
| using WIDESEAWCS_Core.Middlewares; | 
| using WIDESEAWCS_QuartzJob.QuartzExtensions; | 
| using WIDESEAWCS_QuartzJob.Seed; | 
| using WIDESEAWCS_SignalR; | 
| using WIDESEAWCS_Tasks; | 
| using WIDESEAWCS_WCSServer.Filter; | 
|   | 
| var builder = WebApplication.CreateBuilder(args); | 
|   | 
| if (!HslCommunication.Authorization.SetAuthorizationCode("95f1611d-633c-46ea-b03a-38ede1629f74")) | 
| { | 
|     ConsoleHelper.WriteErrorLine("ÊÚȨʧ°Ü£¡µ±Ç°³ÌÐòÖ»ÄÜʹÓÃ24Сʱ£¡"); | 
| } | 
| else | 
|     ConsoleHelper.WriteSuccessLine("ÊÚȨ³É¹¦£¡"); | 
|   | 
| builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder => | 
| { | 
|     builder.RegisterModule(new AutofacModuleRegister());//´øÓнӿڲãµÄ·þÎñ×¢Èë | 
|     builder.RegisterModule(new QuartzJobAutofacModuleRegister()); | 
|     builder.RegisterModule<AutofacPropertityModuleReg>();// | 
| }).ConfigureAppConfiguration((hostingContext, config) => | 
| { | 
|     hostingContext.Configuration.ConfigureApplication(); | 
|     config.Sources.Clear(); | 
|     config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); | 
| }); ; | 
| builder.Inject().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 Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddScoped<QuartzJobCreateDataTabel>(); | 
| builder.Services.AddHostedService<QuartzJobDataTableHostedService>(); | 
|   | 
| builder.Services.AddAutoMapperSetup(); | 
|   | 
| builder.Services.AddCorsSetup(); | 
|   | 
| builder.Services.AddMiniProfilerSetup(); | 
|   | 
| builder.Services.AddSwaggerSetup(); | 
|   | 
| builder.Services.AddJobSetup();//ÈÎÎñµ÷¶È Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddHttpContextSetup(); | 
|   | 
| ConsoleHelper.WriteSuccessLine("×¢²áSignalR²å¼þ"); | 
| builder.Services.AddSignalR();//×¢²áSignalR | 
| builder.Services.AddSingleton<IUserIdProvider, UserIdProvider>();//Óû§IDÌṩÆ÷ | 
|   | 
| builder.Services.AddHostedService<QuartzJobHostedService>(); | 
|   | 
| builder.Services.AddMvc(options => | 
| { | 
|     options.Filters.Add(typeof(ApiAuthorizeFilter)); | 
|     options.Filters.Add(typeof(ActionExecuteFilter)); | 
| }); | 
|   | 
| builder.Services.AddAuthorizationSetup(); | 
|   | 
| builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimitÏÞÁ÷ Æô¶¯·þÎñ | 
|   | 
| builder.Services.AddScoped<UseServiceDIAttribute>(); | 
| builder.Services.AddScoped<CommonConveyorLineJob>(); | 
|   | 
| builder.Services.AddSession(); | 
|   | 
| builder.Services.AddHttpClient(); | 
|   | 
| builder.Services.AddControllers(o => | 
| { | 
|     o.Filters.Add(typeof(GlobalExceptionsFilter));//È«¾ÖÒì³£ | 
| }) | 
| .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); | 
|   | 
| 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("WIDESEAWCS_Server.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.UseMiddleware<HttpRequestMiddleware>(); | 
| app.UseStaticFiles(); | 
| app.UseCookiePolicy(); | 
| app.UseStatusCodePages(); | 
|   | 
| app.UseRouting(); | 
|   | 
| app.UseAuthentication(); | 
| app.UseAuthorization(); | 
|   | 
| app.MapHubs(); | 
| app.MapControllers(); | 
|   | 
| app.Run(); |