using Kean.Infrastructure.Hangfire; using Kean.Infrastructure.Orleans; using Kean.Infrastructure.SignalR; using Kean.Infrastructure.Soap; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; namespace Kean.Presentation.Rest { /// /// 应用程序启动类 /// public class Startup { private readonly IConfiguration _configuration; /// /// 初始化 Kean.Presentation.Rest.Startup 类的新实例 /// public Startup(IConfiguration configuration) => _configuration = configuration; /// /// 依赖注入 /// private static IServiceCollection DependencyInject(IServiceCollection services) => services .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add() .Add(); /// /// 将服务添加到托盘 /// public void ConfigureServices(IServiceCollection services) => DependencyInject(services .AddSwaggerGen(options => { options.OperationFilter(); options.CustomSchemaIds(_ => Guid.NewGuid().ToString("N")); options.OrderActionsBy(a => a.RelativePath); //options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Swagger.xml"), true); options.SwaggerDoc(_configuration["Swagger:Version"], new() { Title = _configuration["Swagger:Title"], Version = _configuration["Swagger:Version"], Contact = new() { Name = _configuration["Swagger:Contact:Name"], Email = _configuration["Swagger:Contact:Email"] } }); }) .AddOrleans(options => { options.SiloPort = int.Parse(_configuration["Orleans:SiloPort"]); options.GatewayPort = int.Parse(_configuration["Orleans:GatewayPort"]); options.ClusterId = _configuration["Orleans:ClusterId"]; options.ServiceId = _configuration["Orleans:ServiceId"]; options.RedisClustering.ConnectionString = _configuration["Orleans:RedisClustering:ConnectionString"]; options.RedisClustering.Database = int.Parse(_configuration["Orleans:RedisClustering:Database"]); options.ConfigureServices(services => DependencyInject(services)); }) .AddHangfire(options => { options.RedisStorage.ConnectionString = _configuration["Hangfire:RedisStorage:ConnectionString"]; options.RedisStorage.Database = int.Parse(_configuration["Hangfire:RedisStorage:Database"]); options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:WcsInputJob"]); options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:WcsOutputJob"]); options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:WcsStationJob"]); //options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:TVStatisticsJob"]); options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:ClearRecordJob"]); options.RecurringJobs.Add(_configuration["Hangfire:RecurringJobs:AutoPalletOutJob"]); }) .AddCors(options => { options.AddDefaultPolicy(policy => { policy.WithOrigins(_configuration["AllowedOrigins"].Split(';')) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }) .AddSignalR(options => { options.Hubs.Add(); options.Hubs.Add(); //options.Hubs.Add(); }) .AddSoap(options => { //options.Services.Add(); //options.Services.Add(); }) .AddControllers(options => { options.Filters.Add(); options.Filters.Add(); }) .Services) .Startup(); /// /// 配置 HTTP 请求管道 /// public void Configure(IApplicationBuilder app) => app .UseOrleans() .UseHangfire() .UseSwagger() .UseRouting() .UseCors() .UseBlacklist() .UseAuthentication() .UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapHubs(); //endpoints.MapSoaps(); }); } }