using DataSharing.Application.Receivers.YiBin; using DataSharing.CityStateDataExchange; using DataSharing.Police110; using DataSharing.Police110.DaoShu110; using DataSharing.Police110.DCJT110; using DataSharing.Repository.Extensions; using DataSharing.SendTask; using DataSharing.YiBin.Enterprise; using DataSharing.YiBin.ZzptPlatformsYB; using FluentValidation; using FluentValidation.AspNetCore; using Hotline.Application; using Mapster; using Serilog; using XF.Domain.Dependency; using XF.Domain.Filters; using XF.Domain.Options; using XF.EasyCaching; using XF.Utility.MQ; namespace DataSharing.Host; internal static class StartupExtensions { const string CorsOrigins = "CorsOrigins"; internal static WebApplication ConfigureServices(this WebApplicationBuilder builder) { var services = builder.Services; var configuration = builder.Configuration; services.AddHttpContextAccessor(); #if DEBUG builder.WebHost.UseUrls("http://*:50105"); #endif services.AddHttpClient(); services.Configure(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(SharingConfiguration)).Bind(d)); var channelConfiguration = configuration.GetSection("ChannelConfiguration").Get(); if (channelConfiguration != null) services.AddHotline(channelConfiguration.HotlineDbContext); //根据市州编码判断属于哪个市州,启用对应的推送服务 var sharingConfig = configuration.GetSection("SharingConfiguration").Get(); if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.YiBin)//宜宾 { services.AddScoped(); services.AddScoped();//110 services.AddScoped();//企业专班 services.AddScoped();//综治平台 services.AddScoped();//市州互转 //应急管理局业务 if (sharingConfig.CityYiBin.YingJiGuanLiJu != null && sharingConfig.CityYiBin.YingJiGuanLiJu.DbConnectionString != null) { services.AddYingJiDb(sharingConfig.CityYiBin.YingJiGuanLiJu); } } else if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.ZiGong)//自贡 { services.AddScoped(); services.AddScoped();//110 services.AddScoped();//市州互转 } else if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.LuZhou)//泸州 { } services .BatchInjectServices() .RegisterRepository() .AddApplication() ; services.RegisterAuthentication(configuration); services.AddControllers(options => { options.Filters.Add(); options.Filters.Add(); }) ; // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle services.AddEndpointsApiExplorer(); //swagger services.RegisterSwagger(); /* CORS */ services.RegisterCors(configuration, CorsOrigins); //mapster services.RegisterMapper(); //mediatr services.AddMediatR(d => { d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly); }); //sqlsugar services.AddSqlSugar(configuration); //关闭TS时间 AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true); //cache services.AddCache(d => { var cacheConfig = configuration.GetSection("Cache").Get(); cacheConfig.Adapt(d); d.Prefix = "DataSharing"; d.TopicName = "Dsharing-topic"; }); //validator services.AddFluentValidationAutoValidation(config => { config.DisableDataAnnotationsValidation = true; }) .AddValidatorsFromAssembly(typeof(ApplicationStartupExtensions).Assembly); //mq services.AddMq(configuration); ////retry pipeline //services.AddResiliencePipeline(StrategyDefaults.RetryStrategy, d => //{ // d.AddRetry(new RetryStrategyOptions // { // Delay = TimeSpan.FromSeconds(5), // //BackoffType = DelayBackoffType.Constant, // //// UseJitter = true, // //MaxDelay = TimeSpan.FromSeconds(10), // MaxRetryAttempts = 10 // }); // //.AddTimeout(TimeSpan.FromSeconds(5)); //}); ////根据市州编码判断属于哪个市州,启用对应的推送服务 //var sharingConfig = configuration.GetSection("SharingConfiguration").Get(); //if (sharingConfig.CityCode == ConfigurationConsts.YiBin) //{ // services.AddScoped(); // services.AddScoped(); //} //else if (sharingConfig.CityCode == ConfigurationConsts.ZiGong) //{ // services.AddScoped(); // services.AddScoped(); //} //job services.RegisterJob(); //services.AddSingleton(); //services.AddSingleton(); return builder.Build(); } internal static WebApplication ConfigurePipelines(this WebApplication app) { app.UseSerilogRequestLogging(); // Configure the HTTP request pipeline. var swaggerEnable = app.Configuration.GetSection("Swagger").Get(); if (swaggerEnable) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors(CorsOrigins); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers() .RequireAuthorization(); //app.MapSubscribeHandler(); return app; } }