You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
4.7 KiB
C#

using Autofac;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SlnMesnac.Config;
using SlnMesnac.Ioc;
using SlnMesnac.Extensions;
using SlnMesnac.Serilog;
using SlnMesnac.Quartz;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* T14-GEN3-7895
* ConsoleApp
* 57e1b754-83fd-42ef-ad93-2693dcbebacf
*
* WenJY
*
* 2024-11-08 10:04:52
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace ConsoleApp
{
public class Startup
{
public IConfiguration Configuration { get; }
private readonly IWebHostEnvironment _env;
private readonly string _instanceId;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
// 从环境变量获取实例ID
_instanceId = Environment.GetEnvironmentVariable("INSTANCE_ID") ?? "1";
Console.WriteLine($"Startup for Instance {_instanceId} initialized");
}
/// <summary>
/// This method gets called by the runtime. Use this method to add services to the container.
/// </summary>
/// <param name="services"></param>
[Obsolete]
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine($"Configuring services for Instance {_instanceId}");
2 months ago
// 注册 SerilogHelper 服务
services.AddSingleton<SerilogHelper>();
services.AddControllers();
//注册AppConfig
services.AddSingleton<AppConfig>(provider =>
{
var configuration = provider.GetService<IConfiguration>();
return configuration.GetSection("AppConfig").Get<AppConfig>();
});
//注册ORM
services.AddSqlSugarSetup();
//注册PLC工厂
2 months ago
services.AddPlcFactorySetup();
//注册httpClient
//services.AddHostedService<AirPorthttpClient>();
//注册TCPServer
//services.AddHostedService<TcpServer>();
//注册RFID工厂
//services.AddRfidFactorySetup();
//注册任务调度
2 months ago
//services.AddQuartzSetUp();
Console.WriteLine($"Services for Instance {_instanceId} configured successfully");
}
/// <summary>
/// AutoFac自动注入
/// </summary>
/// <param name="builder"></param>
public void ConfigureContainer(ContainerBuilder builder)
{
Console.WriteLine($"Configuring Autofac container for Instance {_instanceId}");
// 为容器添加实例标识
builder.Properties["InstanceId"] = _instanceId;
// 确保每个实例有独立的容器配置
DependencyConfigurator.Configure(builder, _instanceId);
Console.WriteLine($"Autofac container for Instance {_instanceId} configured successfully");
}
/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
/// <param name="app"></param>
/// <param name="env"></param>
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
Console.WriteLine($"Configuring application for Instance {_instanceId}");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//启用Serilog中间件
app.UseSerilogExtensions();
//app.UseTouchSocketExtensions();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapGet("/instance", async context =>
{
await context.Response.WriteAsync($"Running Instance {_instanceId}");
});
});
Console.WriteLine($"Application for Instance {_instanceId} configured successfully");
}
}
}