using FluentValidation; using FluentValidation.AspNetCore; using Hotline.Api.Realtimes; using Hotline.Application; using Hotline.Application.Contracts; using Hotline.CallCenter.Devices; using Hotline.Identity.Accounts; using Hotline.NewRock; using Hotline.Permissions; using Hotline.Repository.SqlSugar.Extensions; using Hotline.Wex; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Serilog; using Fw.Utility.Client; using Mapster; using Tr.Sdk; using XF.Domain.Dependency; using XF.Domain.Filters; using XF.Domain.Options; using XF.EasyCaching; using XF.Utility.MQ; using Hotline.DataSharing; namespace Hotline.Api; 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://*:50100"); #endif //services.Configure(d => configuration.GetSection(nameof(DeviceConfigs)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(CallCenterConfiguration)).Bind(d)); services.Configure(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d)); // Add services to the container. services .BatchInjectServices() .RegisterRepository() .AddApplication() //.AddClientCore(configuration) .AddScoped, PasswordHasher>() ; //Authentication services.RegisterAuthentication(configuration); services.AddControllers(options => { options.Filters.Add(); options.Filters.Add(); }) ; // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle services.AddEndpointsApiExplorer(); //swagger services.RegisterSwagger(); //signalR services.RegisterSignalR(configuration); /* CORS */ services.RegisterCors(configuration, CorsOrigins); //mapster services.RegisterMapper(); //mediatr services.AddMediatR(d => { d.RegisterServicesFromAssembly(typeof(ApplicationStartupExtensions).Assembly); }); var callCenterConfiguration = configuration.GetSection("CallCenterConfiguration").Get(); //迅时IPPBX services.AddNewRock(callCenterConfiguration.DeviceConfigs.Address); ////wex //services.AddWex(callCenterConfiguration.Wex.Address); //tr var trConfig = configuration.GetRequiredSection("Tr").Get(); services.AddTrSdk(trConfig.Address, trConfig.Username, trConfig.Password); //sqlsugar services.AddSqlSugar(configuration); //services.AddWexDb(configuration); //cache services.AddCache(d => { var cacheConfig = configuration.GetSection("Cache").Get(); cacheConfig.Adapt(d); d.Prefix = "Hotline"; d.TopicName = "hotline-topic"; }); //validator services.AddFluentValidationAutoValidation(config => { config.DisableDataAnnotationsValidation = true; }) .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly); //mq services.AddMq(configuration); services.AddSingleton(); services.AddSingleton(); return builder.Build(); } internal static WebApplication ConfigurePipelines(this WebApplication app) { app.UseSerilogRequestLogging(); // Configure the HTTP request pipeline. var swaggerEnable = app.Configuration.GetSection("Swagger").Get(); if (swaggerEnable) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors(CorsOrigins); app.UseAuthentication(); app.UseAuthorization(); //app.MapHub("/hubs/callcenter"); app.MapHub("/hubs/hotline"); app.MapControllers() .RequireAuthorization(); //app.MapSubscribeHandler(); return app; } }