using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using MyAvaloniaApp.Configuration; using MyAvaloniaApp.Extensions; using ReactiveUI; using Splat; using System; using System.IO; namespace MyAvaloniaApp; public partial class App : Application { private IServiceProvider? _serviceProvider; private ILogger? _logger; /// /// 无参构造函数,用于 Avalonia 框架初始化 /// public App() { } public override void Initialize() { AvaloniaXamlLoader.Load(this); // 注册自定义 ViewLocator Locator.CurrentMutable.RegisterConstant(new Views.ViewLocator(), typeof(IViewLocator)); } public override void OnFrameworkInitializationCompleted() { // 在框架初始化完成后创建和配置 HostBuilder var host = CreateHostBuilder().Build(); _serviceProvider = host.Services; _logger = _serviceProvider.GetRequiredService>(); _logger.LogInformation("App 框架初始化完成,HostBuilder 已创建并配置"); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { _logger.LogInformation("使用依赖注入创建 MainWindow"); desktop.MainWindow = _serviceProvider.GetRequiredService(); } base.OnFrameworkInitializationCompleted(); _logger.LogInformation("框架初始化完成"); } /// /// 创建 HostBuilder /// /// HostBuilder private IHostBuilder CreateHostBuilder() => Host.CreateDefaultBuilder() .ConfigureAppConfiguration((context, config) => { // 配置应用程序设置 config.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); }) .ConfigureLogging((context, logging) => { // 配置日志 logging.ClearProviders(); logging.AddConfiguration(context.Configuration.GetSection("Logging")); // 启用控制台日志以便调试 logging.AddConsole(); logging.AddDebug(); }) .ConfigureServices((context, services) => { // 注册配置 services.Configure(context.Configuration.GetSection("AppSettings")); // 注册业务服务 services.AddBusinessServices(); // 注册 ViewModel services.AddViewModels(); // 注册 ReactiveUI 服务 services.AddReactiveUI(); // 注册 Avalonia 应用程序 services.AddTransient(); }); }