using WIDESEAWCS_Core.Helper; 
 | 
using WIDESEAWCS_Core.Extensions; 
 | 
using WIDESEAWCS_Core.Middlewares; 
 | 
using System.Reflection; 
 | 
using WIDESEAWCS_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 WIDESEAWCS_Core; 
 | 
using WIDESEAWCS_Core.BaseServices; 
 | 
using Autofac.Extensions.DependencyInjection; 
 | 
using Autofac; 
 | 
using WIDESEAWCS_WCSServer.Filter; 
 | 
using WIDESEAWCS_Core.Authorization; 
 | 
using WIDESEAWCS_Core.Core; 
 | 
using WIDESEAWCS_QuartzJob.Seed; 
 | 
using Autofac.Core; 
 | 
using WIDESEAWCS_QuartzJob.QuartzExtensions; 
 | 
using Microsoft.AspNetCore.Builder; 
 | 
using WIDESEAWCS_Server.HostedService; 
 | 
using WIDESEAWCS_Server.Filter; 
 | 
using WIDESEAWCS_Tasks.OHT; 
 | 
  
 | 
var builder = WebApplication.CreateBuilder(args); 
 | 
  
 | 
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.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.AddWebSocketSetup(); 
 | 
  
 | 
builder.Services.AddHostedService<WebSocketHostService>(); 
 | 
  
 | 
builder.Services.AddAutoMapperSetup(); 
 | 
  
 | 
builder.Services.AddCorsSetup(); 
 | 
  
 | 
builder.Services.AddMiniProfilerSetup(); 
 | 
  
 | 
builder.Services.AddSwaggerSetup(); 
 | 
  
 | 
builder.Services.AddJobSetup();//ÈÎÎñµ÷¶È Æô¶¯·þÎñ 
 | 
  
 | 
builder.Services.AddHttpContextSetup(); 
 | 
  
 | 
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.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.UseAllServicesMiddle(builder.Services); 
 | 
  
 | 
app.UseSession(); 
 | 
//if (app.Environment.IsDevelopment()) 
 | 
{ 
 | 
    //todo 
 | 
    app.UseSwaggerAuthorized(); 
 | 
    app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEAWCS_Server.index.html") ?? throw new Exception("δÕÒµ½WIDESEAWCS_Server.index.htmlÎļþ")); 
 | 
}//ÅжÏÊÇ·ñÐèÒª´ò¿ªswagger 
 | 
  
 | 
app.UseIpLimitMiddle(); 
 | 
app.UseApiLogMiddleware(); 
 | 
//todo 
 | 
//app.UseRecordAccessLogsMiddle(); 
 | 
  
 | 
app.UseCors(AppSettings.Get(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.MapControllers(); 
 | 
  
 | 
app.Run(); 
 |