Avalonia Host主机托管


   public static IHost? Host { get; private set; }
    public static IServiceProvider ServiceProvider;
    
    // Initialization code. Don't use any Avalonia, third-party APIs or any
    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
    // yet and stuff might break.
    [STAThread]
    public static void Main(string[] args)
    {
        // 1. 构造通用主机(但不会立即启动)
        var host = Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
            .ConfigureServices((ctx, services) =>
            {
                services.AddTransient<MainWindowViewModel>();
                services.AddTransient<CommandBarViewModel>();
                services.AddTransient<DateTimeSelectViewModel>();
            })
            .Build();

        try
        {
            // 3. 把 Host 的 ServiceProvider 交给 Avalonia
            ServiceProvider = host.Services;
            // 2. 先启动 Host
            host.StartAsync().GetAwaiter().GetResult();

          

            // 4. 启动 Avalonia(阻塞直到窗口关闭)
            BuildAvaloniaApp()
                .StartWithClassicDesktopLifetime(args);
        }
        finally
        {
            // 5. 应用退出后停止 Host
            host.StopAsync().GetAwaiter().GetResult();
            host.Dispose();
        }
    }
posted @ 2025-12-05 10:00  Timskt  阅读(3)  评论(0)    收藏  举报