Avalonia如何與通用主機Host整合實現MsDI

晨晞gg發表於2024-09-27
如果想在Aavalonia使用IOC,目前我能想到的就是使用Prism或者是MsDI,Prism內部使用的是DryIoc,這個和WPF幾乎沒什麼差別,那如果我想使用微軟實現的Ioc呢,也是可以的,實現方式其實很簡單,就是使用IHost,其中依賴有兩個庫

Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting

現在我門來該造App裡面的程式碼

Avalonia如何與通用主機Host整合實現MsDI
 1 public partial class App : Application
 2 {
 3     private static IHost? host;
 4     private IHost CreateHost()
 5         => Host.CreateDefaultBuilder(Environment.GetCommandLineArgs())
 6         .ConfigureServices(RegisterService)
 7         .Build();
 8     public override void Initialize()
 9     {
10         AvaloniaXamlLoader.Load(this);
11     }
12     public override void OnFrameworkInitializationCompleted()
13     {
14         host = CreateHost();
15         if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
16         {
17             desktop.MainWindow = GetService<MainWindow>();
18         }
19         base.OnFrameworkInitializationCompleted();
20         _ = host.StartAsync();
21     }
22     public static T? GetService<T>()
23     {
24         if (host is null) return default;
25         return host.Services.GetService<T>();
26     }
27     protected virtual void RegisterService(IServiceCollection services)
28     {
29         services.AddSingleton<MainWindow>();
30         services.AddSingleton<MainWindowViewModel>();
31     }
32 }
View Code

這樣就可以使用微軟的DI服務了

相關文章