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; using Autofac.Core; using WIDESEA_Cache; using SimpleRedis; using WIDESEA_DTO.WMS; using static NewLife.Remoting.ApiHttpClient; using NewLife.Windows; using WIDESEA_Core.Enums; var builder = WebApplication.CreateBuilder(args); builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer(builder => { builder.RegisterModule(new AutofacModuleRegister());//´øÓнӿڲãµÄ·þÎñ×¢Èë builder.RegisterModule();// }).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(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(); //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()); 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(); //»º´æÉèÖÃÅäÖÃתʵÌå builder.Services.AddConfigurableOptions(); //½ûÖ¹ÔÚÖ÷»úÆô¶¯Ê±Í¨¹ý App.GetOptions »ñȡѡÏÈçÐè»ñÈ¡ÅäÖÃÑ¡ÏîÀíӦͨ¹ý App.GetConfig("ÅäÖýڵã", true)¡£ var cacheSettings = AppSettings.Configuration.GetSection("CacheSettings").Get(); //Èç¹ûÓÐredisÁ¬½Ó×Ö·û´® if (cacheSettings.UseRedis) { var connectionString = $"server={cacheSettings.RedisSettings.Address};db={cacheSettings.RedisSettings.Db}"; //×¢Èëredis builder.Services.AddSimpleRedis(connectionString); builder.Services.AddScoped(); } else { builder.Services.AddScoped(); } var app = builder.Build(); // ÑéÖ¤ Redis ·þÎñÊÇ·ñ³É¹¦×¢²á using (var scope = app.Services.CreateScope()) { var services = scope.ServiceProvider; var redisService = services.GetService(); if (redisService == null) { WIDESEA_Core.Helper.ConsoleHelper.WriteErrorLine("Redis ·þÎñδ³É¹¦×¢²á"); } else { WIDESEA_Core.Helper.ConsoleHelper.WriteSuccessLine("Redis ·þÎñÒѳɹ¦×¢²á"); } } // 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.GetOptions »ñȡѡÏî var cacheSettingsb = App.GetOptions(); //Èç¹ûÐèÒªÇå³ý»º´æ if (cacheSettingsb.UseRedis && cacheSettingsb.RedisSettings.ClearRedis) { var redis = app.Services.CreateScope().ServiceProvider.GetService(); //»ñÈ¡redis·þÎñ // ɾ³ýredisµÄkey redis.DelByPattern(CacheConst.Cache_Prefix); WIDESEA_Core.Helper.ConsoleHelper.WriteInfoLine("ÕýÔÚ»º´æ¿â´æÐÅÏ¢"); var stockInfoList = await SqlSugarHelper.DbWMS.Queryable().IncludesAllFirstLayer().ToListAsync(); // »º´æ¿â´æÐÅÏ¢ foreach (var item in stockInfoList) { item.StockInfoDetails = new List() { { item.StockInfoDetails[0] } }; redis.HashAdd(CacheConst.Cache_DtStockInfo, item.PalletCode, item); } WIDESEA_Core.Helper.ConsoleHelper.WriteInfoLine("»º´æ¿â´æÐÅÏ¢Íê³É"); } app.Run();