using Autofac;
|
using Autofac.Configuration;
|
using Autofac.Extensions.DependencyInjection;
|
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration.Json;
|
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.Hosting;
|
using Microsoft.OpenApi.Models;
|
using Rhea.Common;
|
using Sundial;
|
using System;
|
using System.IO;
|
using System.Linq;
|
using System.Reflection;
|
using Tiger.Api.Controllers;
|
using Tiger.IBusiness;
|
using Tiger.IBusiness.Utility;
|
|
namespace Tiger.Api
|
{
|
public class Startup
|
{
|
public string version => $"V{(Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute)).First() as AssemblyFileVersionAttribute).Version}";
|
public readonly string anyAllowSpecificOrigins = "any";
|
|
public Startup(IConfiguration configuration)
|
{
|
Configuration = configuration;
|
//初始化 ApiConfig
|
ApiConfig.InitConfig(configuration);
|
|
//测试代码
|
//ConsoleExt.WriteLine("");
|
//Console.Read();
|
//var t = Biz.GetBackupWIP_SN("test");
|
//var l = Biz.Language.GetJson("zh-CN");
|
;
|
|
//删除一个月前的日志
|
DeleteLogs();
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public IConfiguration Configuration { get; }
|
|
// This method gets called by the runtime. Use this method to add services to the container.
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="services"></param>
|
public void ConfigureServices(IServiceCollection services)
|
{
|
//services.RegisterAssembly("Tiger.Service");
|
//services.AddTransient(typeof(IBaseService<>), typeof(BaseService<>));
|
services.AddControllersWithViews().AddExtraControllers().AddNewtonsoftJson(opt =>
|
{
|
opt.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
|
opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
});
|
//services.AddControllers().AddApplicationPart(typeof(_WMSTestController).Assembly);
|
//services.AddControllers();
|
|
//配置跨域处理cors
|
services.AddCors(options =>
|
{
|
options.AddPolicy(anyAllowSpecificOrigins, corsbuilder =>
|
{
|
var corsPath = Configuration.GetSection("CorsPaths").GetChildren().Select(p => p.Value).ToArray();
|
corsbuilder.WithOrigins(corsPath)
|
.AllowAnyMethod()
|
.AllowAnyHeader();
|
//.AllowCredentials();//指定处理cookie
|
});
|
});
|
services.AddSwaggerGen(c =>
|
{
|
c.SwaggerDoc(version, new OpenApiInfo { Title = "Tiger API", Version = version });
|
var basePath = AppDomain.CurrentDomain.BaseDirectory;
|
var xmlPath = Path.Combine(basePath, "Tiger.Api.xml");
|
c.IncludeXmlComments(xmlPath);
|
});
|
//注册定时任务服务
|
services.AddSchedule();
|
//services.AddTransient<IMaterialInfoBusiness, MaterialInfoBusiness>();
|
}
|
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="app"></param>
|
/// <param name="env"></param>
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
{
|
if (env.IsDevelopment())
|
{
|
app.UseDeveloperExceptionPage();
|
}
|
|
//初始化 BizConfig
|
var bizConfig = (new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddJsonFile("BizSettings.json")).Build();
|
//BizConfig.InitConfig(bizConfig);
|
BizConfig.InitConfig(bizConfig, DI.Resolve<ILanguage>().GetDictionary());
|
|
//加载配置文件
|
NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
|
app.UseMiddleware<LogMiddleware>();
|
|
app.UseSwagger();
|
app.UseSwaggerUI(c =>
|
{
|
c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Tiger API {version}");
|
});
|
|
app.UseRouting();
|
app.UseCors(anyAllowSpecificOrigins);//支持跨域:允许特定来源的主机访问
|
|
//app.UseHttpsRedirection();
|
app.UseStaticFiles();
|
|
//app.UseAuthorization();
|
app.UseEndpoints(endpoints =>
|
{
|
endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}").RequireCors(anyAllowSpecificOrigins);
|
endpoints.MapControllers().RequireCors(anyAllowSpecificOrigins);
|
});
|
|
ConsoleExt.Write($"Api Run as{((ApiConfig.IsDevVersion || ApiConfig.IsTestVersion) ? ((ApiConfig.IsDevVersion ? " Dev" : "") + (ApiConfig.IsTestVersion ? " Test" : "")) : " Release")} Edition", ConsoleColor.Cyan);
|
//连接至数据库
|
if (BizConfig.Configuration["IsTestServer"].ToLower() == "true")
|
{
|
ConsoleExt.WriteLine($", Link to Test {BizConfig.Configuration["Databases:Test:DbType"]} Database, " +
|
BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Where(q => q.Contains("server")).FirstOrDefault() +
|
(BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Any(q => q.Contains("server")) ? "," : "") +
|
BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("port")).FirstOrDefault() +
|
(BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("port")) ? "," : "") +
|
BizConfig.Configuration[$"Databases:Test:ConnectionString"].Split(';').Where(q => q.Contains("Data Source") || q.Contains("DataSource") || q.Contains("database")).FirstOrDefault(), ConsoleColor.Cyan);
|
}
|
else
|
{
|
ConsoleExt.WriteLine($", Link to Formal {BizConfig.Configuration["Databases:Main:DbType"]} Database, " +
|
BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("server")).FirstOrDefault() +
|
(BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("server")) ? "," : "") +
|
BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("port")).FirstOrDefault() +
|
(BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("port")) ? "," : "") +
|
BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("Data Source") || q.Contains("DataSource") || q.Contains("database")).FirstOrDefault(), ConsoleColor.Cyan);
|
}
|
|
//初始化Business的AutoFacContainer
|
DI.Resolve<IBiz>().SetContainer(AutoFacContainer.Instance);
|
//开启Api监控总线
|
DI.Resolve<IMonitorBus>().StartMonitors();
|
//开启服务总线
|
DI.Resolve<IServicesBus>().StartServices(app.ApplicationServices.GetService<ISchedulerFactory>());
|
//开启DB缓存自动更新
|
DI.Resolve<IDbCacheBus>().StartAutoUpdate();
|
//开启MQTT服务
|
MQTTHelper.Start();
|
}
|
|
/// <summary>
|
/// 删除一个月前的Log
|
/// </summary>
|
public void DeleteLogs()
|
{
|
DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Logs");
|
if(di.Exists)
|
{
|
var logFiles = di.GetFiles("*.log", SearchOption.AllDirectories);
|
foreach (var file in logFiles)
|
{
|
if ((DateTime.Now - file.LastWriteTime).TotalDays > 30)
|
{
|
file.Delete();
|
}
|
}
|
}
|
|
}
|
}//endClass
|
}
|