MAUI 入门教程系列(4.通用主机)

前言

对于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平台调用
3bc3cf0459930d2efbf48f02505bea23.png

IOS平台调用
fe6a453ce6a39c4a177be54789145539.png

Windows平台调用
e6cc55599ca370950281965d941d2756.png

Tizen平台调用
0baf675d2e48aa645d85dd8062cabb8c.png

MAUI依赖注入调用

91605b1797c626980464ad8cf3d8d1b9.png

总结

这一节, 讲解了MAUI当中的通用应用程序主机构建方式、以及依赖注入的使用方法。包括与Xamarin.Forms的比较使用方法。从下一节开始, 则会主要来介绍MAUI框架的一些内部概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB统计分析与应用100例】案例012:matlab读取Excel数据,调用robustfit函数作稳健回归

稳健回归效果预览: 文章目录 1. 读取数据2. 调用robustfit函数作稳健回归3 .绘制残差和权重的散点图4. 绘制regress函数和robustfit函数对应的回归直线5. 拟合效果1. 读取数据 ClimateData = xlsread(examp08_01.xls); % 从Excel文件读取数据 x

后台页制作01《ivx低代码签到系统制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、签到系统思考 签到系统一般是指公布一个签到链接或者二维码&#xff0c;随后用户扫码后即可完成签到。 那如何制作呢&#xff1f;首先我们可以先不考虑签到页面的制作&#xff0c;既然签到暂时没有…

个人作业-Week2

第一部分 调研&#xff0c; 评测 运行平台 win 8 软件版本&#xff1a;微软必应词典桌面版 3.5.2 BUG标题&#xff1a;必应背单词无法发音 BUG详细描述&#xff1a;如图&#xff0c;左边为必应词典该单词的搜索&#xff0c;可以发音&#xff0c;而右边必应背单词中该单词的发音…

Blazor WebAssembly + Grpc Web=未来?

Blazor WebAssembly是什么首先来说说WebAssembly是什么&#xff0c;WebAssembly是一个可以使C#,Java,Golang等静态强类型编程语言&#xff0c;运行在浏览器中的标准&#xff0c;浏览器厂商基于此标准实现执行引擎。在实现了WebAssembly标准引擎之后&#xff0c;浏览器中可以执行…

Can't create directory 'E:\Repositories\***\db\transactions\138-41.txn':

遇到这种问题应该是迁移SVN库时丢失了文件夹引起的&#xff0c;直接在服务器上找到对应项目的db文件夹&#xff0c;手动创建“transactions”目录和“txn-protorevs”目录即可正常提交。

【MATLAB统计分析与应用100例】案例013:matlab读取Excel数据,调用nlinfit函数作一元非线性回归

1. 一元线性回归分析效果预览 2. matlab完整实现代码 %读取数据,绘制散点图** HeadData = xlsread(examp08_02.xls); %从Excel文

发布功能完成02《ivx低代码签到系统制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、发布功能思考、数据库、服务创建 上一节我们制作了后台的页面&#xff0c;那么此时我们应该需要制作发布功能了&#xff0c;那么在制作之前&#xff0c;我们应该思考一下如何制作这个签到内容发布的…

WPF 实现简易北京地铁效果图

本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。原文作者&#xff1a;眾尋原文地址&#xff1a; https://www.cnblogs.com/ZXdeveloper/p/8600785.html前言这个是百度地图上北京地铁的地址&#xff0c;我们先看下百度上面的效果图&#xff1b;我要实现的内容比…

C#学习笔记-Windows窗体自定义初始位置

根据屏幕大小定义初始位置&#xff1a; &#xff08;这个不是难&#xff0c;但是最近常常忘记&#xff0c;记着方便查看。&#xff09; 1 //获取当前屏幕的长和宽2 int ScreenX Screen.PrimaryScreen.Bounds.Width;3 int ScreenY Screen…

【MATLAB统计分析与应用100例】案例014:matlab读取Excel数据,调用stepwise函数作交互式逐步回归分析

文章目录 1. 交互式逐步回归分析结果预览2. 完整matlab代码1. 交互式逐步回归分析结果预览 2. 完整matlab代码 % 从Excel文件examp08_03.xls中读取数值型数据 xydata = xlsread(examp08_03.xls); y = xydata<

MsSql 自定义分数段,按分数段统计考试人次

--分数段分布 DECLARE levels VARCHAR(100) 10,20,30,40,50,60,70,80,90,100; --自定义分数段 DECLARE paperId VARCHAR(100)0000000000001019--试卷编号 WITH tbTemp AS (--处理分数段SELECT L.levelFROM (SELECT [value] CONVERT(XML, <v> REPLACE(levels, ,, &l…

opencv---颜色空间转化并实现物体跟踪

一、图像处理的基本操作 因为这是第一篇写opencv的笔记&#xff0c;故先讲讲在python下写opencv的基本操作。总共总结了三点如下&#xff1a; 开头一定要加编码声明:-*- coding: utf-8 -*-python下记得引入opencv模块:import cv2要知道如何读取并展示图片,代码如下:# -*- codin…

签到功能完成03《ivx低代码签到系统制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、签到页制作 上一节完成了签到内容的发布&#xff0c;那我们接下来如何制作一个签到页面并且签到呢&#xff1f; 此时我们先创建一个页面叫做签到二维码页面&#xff1a; 随后直接预览这个页面&am…

System.CommandLine参数Argument

前两篇说到Command和Option&#xff0c;这篇说说Argument。Argument的用法和Option很像&#xff0c;只是他的构造和属性有些差别&#xff0c;再就是在运行输入时有区别&#xff0c;接下来看看实现。一个参数//创建根命令 var rootCommand new RootCommand("这是一个命令行…

Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

我本来是不想学习kotlin的&#xff0c;但是现在的形势&#xff0c;很多公司都在使用kotlin开发&#xff0c;可以说学会kotlin也是无奈之举&#xff0c;既然是潮流&#xff0c;谷歌也在大力推广&#xff0c;所以还是只能硬着头皮逼迫自己学一下&#xff0c;也能更快适应公司的需…

【MATLAB统计分析与应用100例】案例015:matlab读取Excel数据,进行值聚类分析

1. 聚类分析轮廓图 2. matlab完整代码 %*****计算例9.1的距离矩阵 x = [1, 2, 6, 8, 11];

01超精美渐变色动态背景完整示例【CSS动效实战(纯CSS与JS动效)】

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本节案例如下&#xff08;其他动效篇幅原因逐步讲解&#xff0c;欢迎三…

Liferay 用本地私服(nexus) 打包部署Portlet应用

当我们使用搭建一个nexus本地仓库&#xff0c;并且配置settings.xml来让应用启用这个仓库。我们使用Liferay 6.1.10的archetype来创建liferay portlet, 如下图&#xff1a; 当我们运行命令mvn package liferay:deploy时&#xff0c;会出现以下错误&#xff1a; [DEBUG] Using c…

【MATLAB统计分析与应用100例】案例016:matlab读取Excel数据,进行样品系统聚类分析

1. 聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化 [X,textdata] = xlsread(examp09_02.xls); % 从Excel文件中读取数据 X = zscore(X

解决React Native报错:Error:Found unexpected optical bounds (red pixel)

问题背景 同样是在升级 gradle plugin V2.2.3 --> gradle plugin V3.0.1后&#xff0c;运行至打包APK期间报错&#xff1a; Error:found unexpected optical bounds (red pixel) on top border at x14.&#xff08;错误&#xff1a;在X14的上边框上发现意外的光学边界&am…