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 保留所有权利。
* CLR版本:4.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");
}
///
/// This method gets called by the runtime. Use this method to add services to the container.
///
///
[Obsolete]
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine($"Configuring services for Instance {_instanceId}");
// 注册 SerilogHelper 服务
services.AddSingleton();
services.AddControllers();
//注册AppConfig
services.AddSingleton(provider =>
{
var configuration = provider.GetService();
return configuration.GetSection("AppConfig").Get();
});
//注册ORM
services.AddSqlSugarSetup();
//注册PLC工厂
services.AddPlcFactorySetup();
//注册httpClient
//services.AddHostedService();
//注册TCPServer
//services.AddHostedService();
//注册RFID工厂
//services.AddRfidFactorySetup();
//注册任务调度
//services.AddQuartzSetUp();
Console.WriteLine($"Services for Instance {_instanceId} configured successfully");
}
///
/// AutoFac自动注入
///
///
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");
}
///
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
///
///
///
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");
}
}
}