using Autofac; using Autofac.Extensions.DependencyInjection; using zzz; using zzz.Common; using zzz.Common.LogHelper; using zzz.Extensions; using zzz.Extensions.Middlewares; using zzz.Middlewares; using zzz.Model.Entity; using zzz.Repository; using zzz.Services.Sys.TasksQzs; using zzz.Tasks; using SqlSugar; using System.Reflection; using Yitter.IdGenerator; using zzz.Filter; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Converters; using zzz.Hubs; var builder = WebApplication.CreateBuilder(args); // 1、配置host与容器 builder.Host .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureContainer(builder => { builder.RegisterModule(new AutofacModuleRegister()); //builder.RegisterModule(); }) .ConfigureLogging((hostingContext, builder) => { builder.AddFilter("System", LogLevel.Error); builder.AddFilter("Microsoft", LogLevel.Error); builder.SetMinimumLevel(LogLevel.Error); builder.AddLog4Net(Path.Combine(Directory.GetCurrentDirectory(), "Log4net.config")); }) .ConfigureAppConfiguration((hostingContext, config) => { config.Sources.Clear(); config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); }) ; // Add services to the container. builder.Services.AddSingleton(new Appsettings(builder.Configuration)); builder.Services.AddSingleton(new LogLock(builder.Environment.ContentRootPath)); SqlsugarSetup.AddSqlsugarSetup(builder.Services); //添加引用 Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson builder.Services.AddSignalR().AddNewtonsoftJsonProtocol(); //builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle //builder.Services.AddEndpointsApiExplorer(); //builder.Services.AddSwaggerGen(c => //{ // c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo() // { // Title="后台Api文档", Version="1.0.0", Description="描述~~" // }); // var bathPath = AppContext.BaseDirectory; // var xmlPath = Path.Combine(bathPath, "zzz.Api.xml"); // c.IncludeXmlComments(xmlPath,true); //}); builder.Services.AddSwaggerSetup(); builder.Services.AddSqlsugarSetup(); builder.Services.AddJobSetup(); builder.Services.AddAutoMapperSetup(); //builder.Services.AddMiniProfilerSetup(); // 设置雪花id的workerId,确保每个实例workerId都应不同 var workerId = (ushort)Appsettings.GetValue("SnowId: WorkerId").ObjToInt(1); YitIdHelper.SetIdGenerator(new IdGeneratorOptions { WorkerId = workerId }); builder.Services.AddCors(options => { options.AddPolicy("any", builder => { //builder.AllowAnyOrigin() //允许任何来源的主机访问 builder .WithOrigins("http://*.*.*.*")//.SetIsOriginAllowedToAllowWildcardSubdomains()//设置允许访问的域 .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials();// }); }); builder.Services.AddControllers(o => { o.Filters.Add(typeof(GlobalExceptionsFilter)); //o.Conventions.Insert(0, new GlobalRouteAuthorizeConvention()); //路由前面加前缀 //o.Conventions.Insert(0, new GlobalRoutePrefixFilter(new RouteAttribute(RoutePrefix.Name))); }) .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; options.SerializerSettings.ContractResolver = new DefaultContractResolver(); options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); builder.Services.AddEndpointsApiExplorer(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseSwaggerMiddle(); //if (app.Environment.IsDevelopment()) //{ // app.UseSwaggerMiddle(); //} app.UseMiddleware(); app.UseMiddleware(); app.UseRouting(); app.UseAuthorization(); //app.UseMiniProfilerMiddleware(); app.UseMiddleware(); //app.MapControllers(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapHub("/api2/chatHub"); }); var scope = app.Services.GetRequiredService().CreateScope(); var sqlSugarRep = scope.ServiceProvider.GetRequiredService(); //var tasksQzServices = scope.ServiceProvider.GetRequiredService(); var tasksRep = scope.ServiceProvider.GetRequiredService>(); var schedulerCenter = scope.ServiceProvider.GetRequiredService(); app.UseSeedDataMiddle(sqlSugarRep, builder.Environment.WebRootPath); app.UseQuartzJobMiddleware(tasksRep, schedulerCenter); app.Run();