123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- 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<IdentityConfiguration>(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d));
- services.Configure<ChannelConfiguration>(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d));
- services.Configure<SharingConfiguration>(d => configuration.GetSection(nameof(SharingConfiguration)).Bind(d));
- var channelConfiguration = configuration.GetSection("ChannelConfiguration").Get<ChannelConfiguration>();
- if (channelConfiguration != null)
- services.AddHotline(channelConfiguration.HotlineDbContext);
- //根据市州编码判断属于哪个市州,启用对应的推送服务
- var sharingConfig = configuration.GetSection("SharingConfiguration").Get<SharingConfiguration>();
- if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.YiBin)//宜宾
- {
- services.AddScoped<ISendTaskDataService, DataSharing.YiBin.YiBinSendTaskDataService>();
- services.AddScoped<IPoliceService, DaoShuService>();//110
- services.AddScoped<IEnterpriseService, EnterpriseService>();//企业专班
- services.AddScoped<IZzptService, ZzptService>();//综治平台
- services.AddScoped<ICityStateDataExchangeService, CityStateDataExchangeService>();//市州互转
- //应急管理局业务
- 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<ISendTaskDataService, DataSharing.ZiGong.ZiGongSendTaskDataService>();
- services.AddScoped<IPoliceService, DcjtService>();//110
- services.AddScoped<ICityStateDataExchangeService, CityStateDataExchangeService>();//市州互转
- }
- else if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.LuZhou)//泸州
- {
- }
- services
- .BatchInjectServices()
- .RegisterRepository()
- .AddApplication()
- ;
- services.RegisterAuthentication(configuration);
- services.AddControllers(options =>
- {
- options.Filters.Add<UnifyResponseFilter>();
- options.Filters.Add<UserFriendlyExceptionFilter>();
- })
- ;
- // 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<CacheOptions>();
- 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<SharingConfiguration>();
- //if (sharingConfig.CityCode == ConfigurationConsts.YiBin)
- //{
- // services.AddScoped<ISendTaskDataService, DataSharing.YiBin.YiBinSendTaskDataService>();
- // services.AddScoped<IPolice110Service, DaoShuService>();
- //}
- //else if (sharingConfig.CityCode == ConfigurationConsts.ZiGong)
- //{
- // services.AddScoped<ISendTaskDataService, DataSharing.ZiGong.ZiGongSendTaskDataService>();
- // services.AddScoped<IPolice110Service, DcjtService>();
- //}
- //job
- services.RegisterJob();
- //services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();
- //services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
- return builder.Build();
- }
- internal static WebApplication ConfigurePipelines(this WebApplication app)
- {
- app.UseSerilogRequestLogging();
- // Configure the HTTP request pipeline.
- var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
- if (swaggerEnable)
- {
- app.UseSwagger();
- app.UseSwaggerUI();
- }
- app.UseCors(CorsOrigins);
- app.UseAuthentication();
- app.UseAuthorization();
- app.MapControllers()
- .RequireAuthorization();
- //app.MapSubscribeHandler();
- return app;
- }
- }
|