StartupExtensions.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using DataSharing.Repository.Extensions;
  2. using FluentValidation;
  3. using FluentValidation.AspNetCore;
  4. using Hotline.Application;
  5. using Mapster;
  6. using Microsoft.AspNetCore.Authorization;
  7. using Microsoft.AspNetCore.Identity;
  8. using Serilog;
  9. using XF.Domain.Dependency;
  10. using XF.Domain.Filters;
  11. using XF.Domain.Options;
  12. using XF.EasyCaching;
  13. using XF.Utility.MQ;
  14. namespace DataSharing.Host;
  15. internal static class StartupExtensions
  16. {
  17. const string CorsOrigins = "CorsOrigins";
  18. internal static WebApplication ConfigureServices(this WebApplicationBuilder builder)
  19. {
  20. var services = builder.Services;
  21. var configuration = builder.Configuration;
  22. services.AddHttpContextAccessor();
  23. #if DEBUG
  24. builder.WebHost.UseUrls("http://*:50105");
  25. #endif
  26. // Add services to the container.
  27. services
  28. .BatchInjectServices()
  29. .RegisterRepository()
  30. .AddApplication()
  31. ;
  32. //Authentication
  33. services.RegisterAuthentication(configuration);
  34. services.AddControllers(options =>
  35. {
  36. options.Filters.Add<UnifyResponseFilter>();
  37. options.Filters.Add<UserFriendlyExceptionFilter>();
  38. })
  39. ;
  40. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  41. services.AddEndpointsApiExplorer();
  42. //swagger
  43. services.RegisterSwagger();
  44. //signalR
  45. services.RegisterSignalR(configuration);
  46. /* CORS */
  47. services.RegisterCors(configuration, CorsOrigins);
  48. //mapster
  49. services.RegisterMapper();
  50. //mediatr
  51. services.AddMediatR(d =>
  52. {
  53. d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly);
  54. });
  55. //sqlsugar
  56. services.AddSqlSugar(configuration);
  57. //cache
  58. services.AddCache(d =>
  59. {
  60. var cacheConfig = configuration.GetSection("Cache").Get<CacheOptions>();
  61. cacheConfig.Adapt(d);
  62. d.Prefix = "DataSharing";
  63. d.TopicName = "Dsharing-topic";
  64. });
  65. //validator
  66. services.AddFluentValidationAutoValidation(config =>
  67. {
  68. config.DisableDataAnnotationsValidation = true;
  69. })
  70. .AddValidatorsFromAssembly(typeof(ApplicationStartupExtensions).Assembly);
  71. //mq
  72. services.AddMq(configuration);
  73. //services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();
  74. //services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
  75. return builder.Build();
  76. }
  77. internal static WebApplication ConfigurePipelines(this WebApplication app)
  78. {
  79. app.UseSerilogRequestLogging();
  80. // Configure the HTTP request pipeline.
  81. var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
  82. if (swaggerEnable)
  83. {
  84. app.UseSwagger();
  85. app.UseSwaggerUI();
  86. }
  87. app.UseCors(CorsOrigins);
  88. app.UseAuthentication();
  89. app.UseAuthorization();
  90. app.MapControllers()
  91. .RequireAuthorization();
  92. //app.MapSubscribeHandler();
  93. return app;
  94. }
  95. }