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();
});
}
}