using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using OrpaonVision.ConfigApp.DependencyInjection; using OrpaonVision.ConfigApp.Infrastructure.Diagnostics; using OrpaonVision.ConfigApp.Infrastructure.Persistence.Options; using OrpaonVision.ConfigApp.Infrastructure.Services; using OrpaonVision.ConfigApp.Views; using OrpaonVision.Core.Abstractions; using System.Windows; namespace OrpaonVision.ConfigApp { /// /// Interaction logic for App.xaml /// public partial class App : Application { private ServiceProvider? _serviceProvider; private GlobalExceptionHandler? _globalExceptionHandler; /// /// 获取应用程序的服务提供程序。 /// public ServiceProvider ServiceProvider => _serviceProvider ?? throw new InvalidOperationException("服务提供程序未初始化。"); /// protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var configuration = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true) .Build(); var services = new ServiceCollection(); services.AddConfigAppServices(configuration); services.AddSingleton(); _serviceProvider = services.BuildServiceProvider(); _globalExceptionHandler = _serviceProvider.GetRequiredService(); _globalExceptionHandler.Register(); var logger = _serviceProvider.GetRequiredService(); logger.LogInformation("ConfigApp 启动完成。"); var persistenceOptions = _serviceProvider.GetRequiredService(); if (persistenceOptions.AutoInitializeOnStartup) { var initializer = _serviceProvider.GetRequiredService(); var initResult = initializer.Initialize(); if (!initResult.Succeeded) { logger.LogWarning($"数据库初始化未完成:{initResult.Code} - {initResult.Message}", initResult.TraceId); } else { logger.LogInformation("数据库初始化完成。", initResult.TraceId); } } var mainWindow = _serviceProvider.GetRequiredService(); // 显示登录窗口 var loginWindow = new LoginWindow( _serviceProvider.GetRequiredService(), _serviceProvider.GetRequiredService()); var loginResult = loginWindow.ShowDialog(); if (loginResult != true) { // 用户取消登录,退出应用 logger.LogInformation("用户取消登录,应用退出"); Shutdown(); return; } mainWindow.Show(); } /// protected override void OnExit(ExitEventArgs e) { _serviceProvider?.GetService()?.LogInformation("ConfigApp 正在退出。"); _globalExceptionHandler?.Dispose(); _serviceProvider?.Dispose(); base.OnExit(e); } } }