StartupExtensions.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using DataSharing.CityStateDataExchange;
  2. using DataSharing.Police110;
  3. using DataSharing.Police110.DaoShu110;
  4. using DataSharing.Police110.DCJT110;
  5. using DataSharing.Repository.Extensions;
  6. using DataSharing.SendTask;
  7. using DataSharing.YiBin.Enterprise;
  8. using DataSharing.YiBin.ZzptPlatformsYB;
  9. using DataSharing.ZiGong.TianQue;
  10. using FluentValidation;
  11. using FluentValidation.AspNetCore;
  12. using Hotline.Application;
  13. using Mapster;
  14. using Serilog;
  15. using XF.Domain.Dependency;
  16. using XF.Domain.Filters;
  17. using XF.Domain.Options;
  18. using XF.EasyCaching;
  19. using XF.Utility.MQ;
  20. namespace DataSharing.Host;
  21. internal static class StartupExtensions
  22. {
  23. const string CorsOrigins = "CorsOrigins";
  24. internal static WebApplication ConfigureServices(this WebApplicationBuilder builder)
  25. {
  26. var services = builder.Services;
  27. var configuration = builder.Configuration;
  28. services.AddHttpContextAccessor();
  29. #if DEBUG
  30. builder.WebHost.UseUrls("http://*:50105");
  31. #endif
  32. services.AddHttpClient();
  33. services.Configure<IdentityConfiguration>(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d));
  34. services.Configure<ChannelConfiguration>(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d));
  35. services.Configure<SharingConfiguration>(d => configuration.GetSection(nameof(SharingConfiguration)).Bind(d));
  36. //根据市州编码判断属于哪个市州,启用对应的推送服务
  37. var sharingConfig = configuration.GetSection("SharingConfiguration").Get<SharingConfiguration>();
  38. if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.YiBin)//宜宾
  39. {
  40. services.AddScoped<ISendTaskDataService, DataSharing.YiBin.YiBinSendTaskDataService>();
  41. services.AddScoped<IPoliceService, DaoShuService>();//110
  42. services.AddScoped<IEnterpriseService, EnterpriseService>();//企业专班
  43. services.AddScoped<IZzptService, ZzptService>();//综治平台
  44. services.AddScoped<ICityStateDataExchangeService, CityStateDataExchangeService>();//市州互转
  45. //应急管理局业务
  46. if (sharingConfig.CityYiBin.YingJiGuanLiJu != null && sharingConfig.CityYiBin.YingJiGuanLiJu.DbConnectionString != null)
  47. {
  48. services.AddYingJiDb(sharingConfig.CityYiBin.YingJiGuanLiJu);
  49. }
  50. }
  51. else if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.ZiGong)//自贡
  52. {
  53. services.AddScoped<ISendTaskDataService, DataSharing.ZiGong.ZiGongSendTaskDataService>();
  54. services.AddScoped<IPoliceService, DcjtService>();//110
  55. services.AddScoped<ICityStateDataExchangeService, CityStateDataExchangeService>();//市州互转
  56. services.AddScoped<ITianQueService, TianQueService>();//随手拍天阙
  57. }
  58. else if (sharingConfig != null && sharingConfig.CityCode == ConfigurationConsts.LuZhou)//泸州
  59. {
  60. services.AddScoped<ISendTaskDataService, DataSharing.LuZhou.LuZhouSendTaskDataService>();
  61. services.AddScoped<IPoliceService, DaoShuService>();//110
  62. services.AddScoped<ICityStateDataExchangeService, CityStateDataExchangeService>();//市州互转
  63. }
  64. services
  65. .BatchInjectServices()
  66. .RegisterRepository()
  67. .AddApplication()
  68. ;
  69. services.RegisterAuthentication(configuration);
  70. services.AddControllers(options =>
  71. {
  72. options.Filters.Add<UnifyResponseFilter>();
  73. options.Filters.Add<UserFriendlyExceptionFilter>();
  74. })
  75. ;
  76. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  77. services.AddEndpointsApiExplorer();
  78. //swagger
  79. services.RegisterSwagger();
  80. /* CORS */
  81. services.RegisterCors(configuration, CorsOrigins);
  82. //mapster
  83. services.RegisterMapper();
  84. //mediatr
  85. services.AddMediatR(d => { d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly); });
  86. //sqlsugar
  87. services.AddSqlSugar(configuration);
  88. //关闭TS时间
  89. AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
  90. AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
  91. //cache
  92. services.AddCache(d =>
  93. {
  94. var cacheConfig = configuration.GetSection("Cache").Get<CacheOptions>();
  95. cacheConfig.Adapt(d);
  96. d.Prefix = "DataSharing";
  97. d.TopicName = "Dsharing-topic";
  98. });
  99. //validator
  100. services.AddFluentValidationAutoValidation(config => { config.DisableDataAnnotationsValidation = true; })
  101. .AddValidatorsFromAssembly(typeof(ApplicationStartupExtensions).Assembly);
  102. //mq
  103. services.AddMq(configuration);
  104. ////retry pipeline
  105. //services.AddResiliencePipeline(StrategyDefaults.RetryStrategy, d =>
  106. //{
  107. // d.AddRetry(new RetryStrategyOptions
  108. // {
  109. // Delay = TimeSpan.FromSeconds(5),
  110. // //BackoffType = DelayBackoffType.Constant,
  111. // //// UseJitter = true,
  112. // //MaxDelay = TimeSpan.FromSeconds(10),
  113. // MaxRetryAttempts = 10
  114. // });
  115. // //.AddTimeout(TimeSpan.FromSeconds(5));
  116. //});
  117. ////根据市州编码判断属于哪个市州,启用对应的推送服务
  118. //var sharingConfig = configuration.GetSection("SharingConfiguration").Get<SharingConfiguration>();
  119. //if (sharingConfig.CityCode == ConfigurationConsts.YiBin)
  120. //{
  121. // services.AddScoped<ISendTaskDataService, DataSharing.YiBin.YiBinSendTaskDataService>();
  122. // services.AddScoped<IPolice110Service, DaoShuService>();
  123. //}
  124. //else if (sharingConfig.CityCode == ConfigurationConsts.ZiGong)
  125. //{
  126. // services.AddScoped<ISendTaskDataService, DataSharing.ZiGong.ZiGongSendTaskDataService>();
  127. // services.AddScoped<IPolice110Service, DcjtService>();
  128. //}
  129. //job
  130. services.RegisterJob();
  131. //services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();
  132. //services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
  133. return builder.Build();
  134. }
  135. internal static WebApplication ConfigurePipelines(this WebApplication app)
  136. {
  137. app.UseSerilogRequestLogging();
  138. // Configure the HTTP request pipeline.
  139. var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
  140. if (swaggerEnable)
  141. {
  142. app.UseSwagger();
  143. app.UseSwaggerUI();
  144. }
  145. app.UseCors(CorsOrigins);
  146. app.UseAuthentication();
  147. app.UseAuthorization();
  148. app.MapControllers()
  149. .RequireAuthorization();
  150. //app.MapSubscribeHandler();
  151. return app;
  152. }
  153. }