StartupExtensions.cs 6.8 KB

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