引言

在移动应用开发中,依赖注入是一项非常重要的技术,它可以帮助我们简化代码结构、提高可维护性并增加测试覆盖率。在最新的.NET跨平台框架MAUI中,我们也可以利用依赖注入来构建高效的应用程序架构。本文将详细介绍在MAUI上如何使用依赖注入,旨在帮助开发者更好地理解和应用这一技术。

什么是依赖注入?

依赖注入是一种设计模式,它通过将对象的创建和依赖关系的管理交给容器来简化应用程序的开发。依赖注入有助于解耦组件之间的依赖关系,使得代码更加灵活、可扩展并且易于测试。

为什么在MAUI上使用依赖注入?

在MAUI中,应用程序需要处理各种不同的服务、组件和资源,而这些依赖关系的管理可能会变得非常复杂。使用依赖注入可以有效地解耦这些依赖关系,使得我们能够更加专注于应用程序的业务逻辑,而无需关注底层的实现细节。

如何在MAUI上使用依赖注入?

首先创建好一个.NET MAUI项目之后,需要有以下前提条件

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="QuickCalc.App.MainPage"> <Label VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
Text="{Binding LabelText}"/> </ContentPage>

namespace QuickCalc.App.ViewModels;

public class LabelViewModel
{
public string LabelText { get; set; } = "Hello World";
}

我们通过依赖注入将LabelText属性绑定到Label的Text上。

 var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
#if DEBUG
builder.Logging.AddDebug();
#endif return builder.Build();

第一步安装Microsoft.Extensions.DependencyInjection

Install-Package Microsoft.Extensions.DependencyInjection

第二步打开MauiProgram.cs

  public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
//服务注册
builder.Services.AddSingleton<MainPage>();
builder.Services.AddSingleton<LabelViewModel>();
#if DEBUG
builder.Logging.AddDebug();
#endif return builder.Build();
}

增加的两句服务注册

builder.Services.AddSingleton<MainPage>();
builder.Services.AddSingleton<LabelViewModel>();

第三步修改App.xaml.cs

  public partial class App : Application
{
public App(MainPage mainPage)
{
InitializeComponent(); MainPage = mainPage;
}
}

增加了MainPage的构造函数注入

第四步修改MainPage.xaml.cs

 public partial class MainPage : ContentPage
{ public MainPage(LabelViewModel labelViewModel)
{
InitializeComponent();
BindingContext = labelViewModel;
}
}

增加了LabelViewModel的构造函数注入以及BindingContext的赋值。

第五步运行程序

至此,运行项目可以看到hello,World!已经在MAUI中继承了依赖​

结论

在MAUI上,依赖注入是一个非常有价值的技术,它可以帮助我们构建简洁、灵活和可测试的应用程序。通过合理地使用依赖注入,我们能够有效地管理和解耦组件之间的依赖关系,提高开发效率和代码质量。希望本文对您理解和应用MAUI上的依赖注入有所帮助!

【C#/.NET】MAUI上的依赖注入的更多相关文章

  1. 使用Autofac在ASP.NET Web API上实现依赖注入

    在ASP.NET Web API里使用Autofac 1.通过NuGet安装Autofac.WebApi(当时安装的是Autofac 3.1.0) PM > Install-Package Au ...

  2. WebAPI2使用AutoFac依赖注入完整解决方案。

    WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S ...

  3. Spring不支持依赖注入static静态变量

    在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这样: 可以试一下,yourClass在这种状态下不能够被依赖注入,会抛出运行 ...

  4. Spring依赖注入 --- 简单使用说明

    Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...

  5. Spring它不支持依赖注入static静态变量

    在springframework在,我们不能@Autowired静态变量,制作spring bean,例如,没有那么: @Autowired private static YourClass your ...

  6. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着 ...

  7. PHP反射机制实现自动依赖注入

    依赖注入又叫控制反转,使用过框架的人应该都不陌生.很多人一看名字就觉得是非常高大上的东西,就对它望而却步,今天抽空研究了下,解开他它的神秘面纱.废话不多说,直接上代码: /* * * * 工具类,使用 ...

  8. Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描

    注意:注入基本类型值在本质上就是依赖注入,而且是利用的set方式进行的依赖注入 1 注入基本类型的值 <property name="基本类型的成员变量名" value=&q ...

  9. 理解依赖注入 for Zend framework 2

    依赖注入(Dependency Injection),也成为控制反转(Inversion of Control),一种设计模式,其目的是解除类之间的依赖关系. 假设我们需要举办一个Party,Part ...

  10. 【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示

    前言:Maui终于在昨天(2022年8月9日)推送出来了.今儿就迫不及待来把玩一下先. A.我本地已有VS2022,不过版本比较老,此处选择更新.工具 -> 获取功能和更新里面,可以获取到新版本 ...

随机推荐

  1. MySQL匿名空用户名处理

    问题描述:公司漏扫发现数据库内出现空用户名及密码,需要对这些用户进行整改 1.首先出现了疑问,这些空的用户名是怎么出现的,而且不附带密码. 2.可以手动这样创建这样的用户名和密码形式么. 3.如果能这 ...

  2. 【书籍阅读】【Spring实战】二 装配Bean

    Spring配置的可选方案 ①自动化装配Bean:@Component ②Java代码装配Bean:@Bean ③XML装配Bean 自动化装配Bean Spring从两个角度实现对 @Compone ...

  3. Scanner对象的用法

    Java流程控制 想要实现程序与人的交互,我们必须使用Java给我们提供的工具类.就像我最开始写的一篇博客,用Java提供给我们的一个机器人类Robot是控制鼠标键盘的.今天我们学习的是一个可以获取用 ...

  4. Node.js入门学习笔记

    NodeJs是js的运行时,意味着可以在浏览器外运行js.可以使用nodejs来构建服务器端应用.CLI应用.Web API,甚至用electron构建桌面端应用. 使用nvm来管理node版本. 在 ...

  5. SpringCloud Gateway 3.x 响应头添加 Skywalking TraceId

    在微服务架构中,一次请求可能会被多个服务处理,而每个服务又会产生相应的日志,且每个服务也会有多个实例.在这种情况下,如果系统发生异常,没有 Trace ID,那么在进行日志分析和追踪时就会非常困难,因 ...

  6. vite不能选配方案?vite-creater强势来袭!

    我正在参加「掘金·启航计划」 项目背景 vite出现之后,迅速带走了一大波webpack的使用者,即使是对打包工具不熟悉的小白,也能很快感受到两者的区别--vite快的多! vite官方文档第一句也是 ...

  7. 自创简易CSS Tab 选项卡

    前段时间我注册了 w3c.run域名,打算做一个W3C相关技术在线试验工具.没错,就是在线编写html.css.js代码然后在线运行,查看效果. 在设计首页时,我打算首页提供三个代码编辑器,介于界面大 ...

  8. C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地

    本文将探讨如何使用c#开发基于大语言模型的私域聊天机器人落地.大语言模型(Large Language Model,LLM 这里主要以chatgpt为代表的的文本生成式人工智能)是一种利用深度学习方法 ...

  9. 微擎删除分类无法删除解决-select in效率低解决办法

    今天朋友微擎后台微网站里的分类要删除,可是怎么删除也不能删除,同样的系统另一套却可以迅速删除. 后来查询到是查询语句的问题,朋友的平台用户量太大,数据太大,用了以下语句,造成效率太低: SELECT ...

  10. 2020-09-13:判断一个正整数是a的b次方,a和b是整数,并且大于等于2,如何求解?

    福哥答案2020-09-13: 首先确定b的范围,b的范围一定在[2,logN]里.然后遍历b,求a的范围,如果范围长度等于0,说明这个正整数是a的b次方.1.遍历b范围.二分法求a,a初始范围是[2 ...