描述 .NET MAUI 体系结构

发布时间 2023-09-25 10:08:00作者: 韩梦芫

跨平台应用开发使用的一种常见模式是考虑用户界面中的业务逻辑,然后为每个平台开发单独的用户界面和 UI 逻辑。 虽然每种类型的设备的业务逻辑保持不变,但驱动应用和显示数据的代码可能会有所不同。 出现这种差异是因为设备所提供的功能、API 和特性不相同。 以这种方式构建多平台应用不仅需要处理单独的 SDK,还需要处理完全不同的语言和工具集。

.NET MAUI 的目的是简化多平台应用开发。 使用 .NET MAUI,可以使用单个项目创建多平台应用,但可以根据需要添加特定于平台的源代码和资源。 .NET MAUI 的主要目的是使你能够在单个代码库中实现尽可能多的应用程序逻辑和 UI 布局。

本单元将介绍 .NET MAUI 的体系结构以及生成 .NET MAUI 应用程序所需的工具。

什么是 .NET MAUI 技术堆栈?

.NET 提供了一系列特定于平台的框架,用于创建应用:.NET for Android、.NET for iOS(和 iPadOS)、.NET for Mac 和 WinUI 3(利用 Windows 应用 SDK)。 这些框架均有权访问相同的 .NET 6 基类库 (BCL)。 该库提供了创建和管理资源,以及从代码中抽象出基础设备的详细信息的功能。 BCL 依赖于 .NET 运行时来为代码提供执行环境。 对于 Android、iOS(和 iPadOS)和 macOS,该环境由 Mono 实现,它是 .NET 运行时的开源实现。 在 Windows 上,Win32 起到相同的作用,只是它针对 Windows 平台进行了优化。

虽然 BCL 使在不同类型的设备上运行的应用程序能够共享常见的业务逻辑,但各种平台定义应用程序用户界面的方式各不相同。 这些平台提供了不同的模型来指定用户界面元素如何通信和互操作。 可以使用特定于平台的适当框架(.NET for Android、.NET for iOS、.NET for Mac 或 WinUI 3)分别为每个平台创建 UI,但此方法要求你为每个单独的设备系列维护代码库。 .NET MAUI 提供了用于为移动应用程序和桌面应用程序构建 UI 的单一框架。 可以使用此框架(如下图中的箭头 1 所示)创建 UI,.NET MAUI 负责将其转换为适当的平台(箭头 2)。

有时可能需要实现特定于平台的功能。 在这些情况下,可以调用特定于平台的框架中的方法,如下图中箭头 3 突出显示的那样。

示意图显示 .NET MAUI 技术堆栈和实现平台特定功能的方式。

.NET MAUI 的工作原理是什么?

.NET MAUI 从 UI 元素的逻辑说明中抽象出该元素的实现。 可以使用 XAML(基于 XML 的平台中性语言)来描述 UI。 例如,下面的 XAML 片段显示了按钮控件的说明:

<Button Text="Click me"
        SemanticProperties.Hint="Counts the number of times you click"
        Clicked="OnCounterClicked"
        HorizontalOptions="Center" />

 

此示例定义按钮的标签(“Click me”),并指定当用户选择该按钮时,应运行名为 OnCounterClicked 的方法。 其他属性可以修改按钮和文本的布局;在此示例中,文本位于按钮的中心。 语义属性为具有视觉障碍的用户提供辅助功能支持。

.NET MAUI 始终为目标设备生成本机代码,因此你可以获得最佳性能。 .NET MAUI 使用特定于每个平台和 UI 元素的“处理程序”来执行操作。 例如,如果为应用面向 iOS,则 .NET MAUI 处理程序会将此代码映射到 iOS UIButton。 如果在 Android 上运行,则会获得 Android AppCompatButton。 这些处理程序通过 .NET MAUI 提供的特定于控件的接口间接访问,例如按钮的 IButton。

示意图显示 .NET MAUI 如何将 XAML 控件映射到本机控件。此图展现了 .NET MAUI 控件实现了每个本机处理程序也会实现的接口。

 备注

还可以根据偏好使用 C# 代码动态创建 UI。 此方法使你可以根据环境修改布局。 例如,如果用户没有适当的授权级别,你可能不希望显示某些控件。

借助 .NET MAUI,可以轻松访问按钮等常用控件。 还可同样轻松地访问其他常用控件(如文本输入字段、标签和日期选取器)。 但是,各个控件仍不足以成为可用于创建丰富应用的良好平台。 .NET MAUI 还提供:

  • 用于设计页的精心布局引擎。
  • 用于创建丰富导航类型的多种页类型,如抽屉。
  • 对数据绑定的支持,以便实现更简洁且可维护性更高的开发模式。
  • 创建自定义处理程序,以增强 UI 元素的显示方式的能力。
  • 对本机 API 的直接访问,以及与 UI 分离的移动应用和桌面应用的许多常见需求的抽象。 概要库使应用能够访问 GPS、加速计、电池和网络状态等内容。 通过此库,还可以使用在移动开发中常见的数十种传感器和服务。

.NET MAUI 开发的要求

若要创建 .NET MAUI 应用,需要安装已安装了以下工作负载的 Visual Studio 版本 17.3 或更高版本:

  • .NET Multi-Platform App UI 开发

此外,如果要生成 .NET MAUI Blazor 应用,必须安装 ASP.NET 和 Web 开发工作负载。 如果要在 macOS 上进行开发,则需安装 Visual Studio for Mac 预览版 17.4

Visual Studio 安装程序的屏幕截图,其中显示了支持 .NET MAUI 开发所需的工作负载。