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(); 
 |