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();
}
}