前言
對于ASP.NET Core 開發人員而言, 這并不陌生, 當ASP.NET Core應用程序啟動時, 會創建默認的應用程序主機, 我們可以為應用程序配置所有的依賴關系、系統設置, 最終啟動。
如下所示:
using IHost host = Host.CreateDefaultBuilder(args).ConfigureServices((_, services) =>services.AddHostedService<ExampleHostedService>()).Build();await host.RunAsync();
為了能夠讓MAUI項目帶來統一的微軟開發式體驗, MAUI同樣具備通用應用程序主機構建器。相對比Xamarin.Forms而言, MAUI具備以下優勢:
Xamarin.Forms | .NET MAUI |
---|---|
不統一配置 | 統一配置 |
容器不可擴展 | 容器可擴展 |
掃描程序集加載依賴服務 | 按需配置性能佳 |
MAUI VS Xamarin.Forms
初始化應用程序
Xamarin.Forms
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
Xamarin.Forms 內部的初始化都無法擴展
MAUI
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
MAUI可以通過 MauiAppBuilder 進行擴展
服務注冊對比
Xamarin.Forms
[assembly: Xamarin.Forms.Dependency(typeof(LocalService))]
namespace MyApp.Droid
{public class LocalService : ILocalService{public void SetValue(string key, object value){ }}
}
需要在每個平臺中單獨定義接口實現, 然后添加程序集特性標記對應的目標類型
MAUI
builder.Services.AddScoped<ILocalService, LocalService>();
一行代碼解決,輕松高效!
字體導出對比
Xamarin.Forms
[assembly: ExportFont("iconfont.ttf", Alias = "iconfont")]
同樣是通過程序集特性導出對應的字體
MAUI
.ConfigureFonts(fonts =>{fonts.AddFont("iconfont.ttf", "iconfont"); });
通過內置的字體擴展服務添加系統字體。
通用主機調用
對于每個平臺而言, 通過統一的方式調用MauiProgram.CreateMauiApp()靜態方法, 構建應用程序, 包括所有的字體、服務、處理程序、渲染器、跨平臺API擴展等。
Android平臺調用
IOS平臺調用
Windows平臺調用
Tizen平臺調用
MAUI依賴注入調用
總結
這一節, 講解了MAUI當中的通用應用程序主機構建方式、以及依賴注入的使用方法。包括與Xamarin.Forms的比較使用方法。從下一節開始, 則會主要來介紹MAUI框架的一些內部概念。