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 NLog;
using Rhea.Common;
using Sundial;
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using Tiger.Api.Controllers;
using Tiger.Api.DbCache;
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();
}
///
///
///
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
///
///
///
///
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();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
///
///
///
///
///
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().GetDictionary());
//加载配置文件
NLog.LogManager.Setup().LoadConfigurationFromFile("nlog.config").GetCurrentClassLogger();
app.UseMiddleware();
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().SetContainer(AutoFacContainer.Instance);
//开启Api监控总线
DI.Resolve().StartMonitors();
//开启服务总线
DI.Resolve().StartServices(app.ApplicationServices.GetService());
//开启DB缓存自动更新
//DI.Resolve().StartAutoUpdate();
DbCacheBus.StartAutoUpdate();
//开启MQTT服务
MQTTHelper.Start();
}
///
/// 删除一个月前的Log
///
public void DeleteLogs()
{
DirectoryInfo di = new (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
}