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;
|
|
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>();
|
|
//»º´æÉèÖÃÅäÖÃתʵÌå
|
builder.Services.AddConfigurableOptions<CacheSettingsOptions>();
|
//½ûÖ¹ÔÚÖ÷»úÆô¶¯Ê±Í¨¹ý App.GetOptions<TOptions> »ñȡѡÏÈçÐè»ñÈ¡ÅäÖÃÑ¡ÏîÀíӦͨ¹ý App.GetConfig<TOptions>("ÅäÖýڵã", true)¡£
|
var cacheSettings = AppSettings.Configuration.GetSection("CacheSettings").Get<CacheSettingsOptions>();
|
//Èç¹ûÓÐredisÁ¬½Ó×Ö·û´®
|
if (cacheSettings.UseRedis)
|
{
|
var connectionString =
|
$"server={cacheSettings.RedisSettings.Address};db={cacheSettings.RedisSettings.Db}";
|
//×¢Èëredis
|
builder.Services.AddSimpleRedis(connectionString);
|
builder.Services.AddScoped<ISimpleCacheService, RedisCacheService>();
|
}
|
else
|
{
|
builder.Services.AddScoped<ISimpleCacheService, MemoryCacheService>();
|
}
|
|
|
var app = builder.Build();
|
|
// ÑéÖ¤ Redis ·þÎñÊÇ·ñ³É¹¦×¢²á
|
using (var scope = app.Services.CreateScope())
|
{
|
var services = scope.ServiceProvider;
|
var redisService = services.GetService<ISimpleCacheService>();
|
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<TOptions> »ñȡѡÏî
|
var cacheSettingsb = App.GetOptions<CacheSettingsOptions>();
|
//Èç¹ûÐèÒªÇå³ý»º´æ
|
if (cacheSettingsb.UseRedis && cacheSettingsb.RedisSettings.ClearRedis)
|
{
|
var redis = app.Services.CreateScope().ServiceProvider.GetService<ISimpleCacheService>(); //»ñÈ¡redis·þÎñ
|
// ɾ³ýredisµÄkey
|
redis.DelByPattern(CacheConst.Cache_Prefix);
|
}
|
|
app.Run();
|