using HME_MoistureLossMeter.Models; using HME_MoistureLossMeter.Services; using HME_MoistureLossMeter.ViewModels; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Serilog; using System; using System.IO; using System.Windows; namespace HME_MoistureLossMeter { public partial class App : Application { private IHost _host; public static IServiceProvider ServiceProvider { get; private set; } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // 配置日志 Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.File(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "log-.txt"), rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}") .CreateLogger(); try { _host = Host.CreateDefaultBuilder(e.Args) .ConfigureServices((context, services) => { // 配置 var plcConfig = context.Configuration.GetSection("PlcConfiguration").Get(); var mesConfig = context.Configuration.GetSection("MesConfiguration").Get(); var deviceConfig = context.Configuration.GetSection("DeviceConfiguration").Get(); services.AddSingleton(plcConfig); services.AddSingleton(mesConfig); services.AddSingleton(deviceConfig); // 服务 services.AddSingleton(); services.AddSingleton(); // ViewModels services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // HttpClient services.AddHttpClient(client => { client.BaseAddress = new Uri(mesConfig.BaseUrl); client.Timeout = TimeSpan.FromSeconds(mesConfig.TimeoutSeconds); }); }) .UseSerilog() .Build(); ServiceProvider = _host.Services; // 初始化并启动服务 var plcService = ServiceProvider.GetRequiredService(); var mesService = ServiceProvider.GetRequiredService(); // 创建主窗口 var mainWindow = new MainWindow(); mainWindow.DataContext = ServiceProvider.GetRequiredService(); mainWindow.Show(); } catch (Exception ex) { Log.Fatal(ex, "应用程序启动失败"); MessageBox.Show($"启动失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); Shutdown(); } } protected override void OnExit(ExitEventArgs e) { Log.Information("应用程序关闭"); Log.CloseAndFlush(); _host?.Dispose(); base.OnExit(e); } } }