StartupExtensions.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using FluentValidation;
  2. using FluentValidation.AspNetCore;
  3. using Hotline.Api.Realtimes;
  4. using Hotline.Application;
  5. using Hotline.Application.Contracts;
  6. using Hotline.CallCenter.Devices;
  7. using Hotline.Identity.Accounts;
  8. using Hotline.NewRock;
  9. using Hotline.Permissions;
  10. using Hotline.Repository.SqlSugar.Extensions;
  11. using Hotline.Wex;
  12. using Microsoft.AspNetCore.Authorization;
  13. using Microsoft.AspNetCore.Identity;
  14. using Serilog;
  15. using Fw.Utility.Client;
  16. using Mapster;
  17. using Tr.Sdk;
  18. using XF.Domain.Dependency;
  19. using XF.Domain.Filters;
  20. using XF.Domain.Options;
  21. using XF.EasyCaching;
  22. using XF.Utility.MQ;
  23. using Hotline.DataSharing;
  24. namespace Hotline.Api;
  25. internal static class StartupExtensions
  26. {
  27. const string CorsOrigins = "CorsOrigins";
  28. internal static WebApplication ConfigureServices(this WebApplicationBuilder builder)
  29. {
  30. var services = builder.Services;
  31. var configuration = builder.Configuration;
  32. services.AddHttpContextAccessor();
  33. #if DEBUG
  34. builder.WebHost.UseUrls("http://*:50100");
  35. #endif
  36. //services.Configure<DeviceConfigs>(d => configuration.GetSection(nameof(DeviceConfigs)).Bind(d));
  37. services.Configure<IdentityConfiguration>(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d));
  38. services.Configure<CallCenterConfiguration>(d => configuration.GetSection(nameof(CallCenterConfiguration)).Bind(d));
  39. services.Configure<ChannelConfiguration>(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d));
  40. // Add services to the container.
  41. services
  42. .BatchInjectServices()
  43. .RegisterRepository()
  44. .AddApplication()
  45. //.AddClientCore(configuration)
  46. .AddScoped<IPasswordHasher<Account>, PasswordHasher<Account>>()
  47. ;
  48. //Authentication
  49. services.RegisterAuthentication(configuration);
  50. services.AddControllers(options =>
  51. {
  52. options.Filters.Add<UnifyResponseFilter>();
  53. options.Filters.Add<UserFriendlyExceptionFilter>();
  54. })
  55. ;
  56. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  57. services.AddEndpointsApiExplorer();
  58. //swagger
  59. services.RegisterSwagger();
  60. //signalR
  61. services.RegisterSignalR(configuration);
  62. /* CORS */
  63. services.RegisterCors(configuration, CorsOrigins);
  64. //mapster
  65. services.RegisterMapper();
  66. //mediatr
  67. services.AddMediatR(d =>
  68. {
  69. d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly);
  70. });
  71. var callCenterConfiguration = configuration.GetSection("CallCenterConfiguration").Get<CallCenterConfiguration>();
  72. //迅时IPPBX
  73. services.AddNewRock(callCenterConfiguration.DeviceConfigs.Address);
  74. ////wex
  75. //services.AddWex(callCenterConfiguration.Wex.Address);
  76. //tr
  77. var trConfig = configuration.GetRequiredSection("Tr").Get<TrConfiguration>();
  78. services.AddTrSdk(trConfig.Address, trConfig.Username, trConfig.Password);
  79. //sqlsugar
  80. services.AddSqlSugar(configuration);
  81. //services.AddWexDb(configuration);
  82. //cache
  83. services.AddCache(d =>
  84. {
  85. var cacheConfig = configuration.GetSection("Cache").Get<CacheOptions>();
  86. cacheConfig.Adapt(d);
  87. d.Prefix = "Hotline";
  88. d.TopicName = "hotline-topic";
  89. });
  90. //validator
  91. services.AddFluentValidationAutoValidation(config =>
  92. {
  93. config.DisableDataAnnotationsValidation = true;
  94. })
  95. .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly);
  96. //mq
  97. services.AddMq(configuration);
  98. services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();
  99. services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
  100. return builder.Build();
  101. }
  102. internal static WebApplication ConfigurePipelines(this WebApplication app)
  103. {
  104. app.UseSerilogRequestLogging();
  105. // Configure the HTTP request pipeline.
  106. var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
  107. if (swaggerEnable)
  108. {
  109. app.UseSwagger();
  110. app.UseSwaggerUI();
  111. }
  112. app.UseCors(CorsOrigins);
  113. app.UseAuthentication();
  114. app.UseAuthorization();
  115. //app.MapHub<CallCenterHub>("/hubs/callcenter");
  116. app.MapHub<HotlineHub>("/hubs/hotline");
  117. app.MapControllers()
  118. .RequireAuthorization();
  119. //app.MapSubscribeHandler();
  120. return app;
  121. }
  122. }