当前位置: 首页 > news >正文

通过示例了解 .NET Core 中的依赖注入

依赖注入 (DI) 是一种用于实现 IoC(控制反转)的设计模式,可以更好地解耦应用程序内的依赖关系并更轻松地管理它们。.NET Core 内置了对依赖注入的支持,提供了一种有效管理依赖关系的强大方法。

一.什么是依赖注入?

依赖注入是一种技术,其中一个对象提供另一个对象的依赖项。“依赖项”是另一个对象所需的任何对象。使用 DI,这些依赖项不是由依赖对象(消费者)创建的,而是通常在运行时注入到它们中,从而产生更模块化、更易于测试和更易于维护的代码。

二.依赖注入的好处

  1. **减少依赖携带:**消费者不需要知道如何创建其依赖关系。
  2. **提高灵活性:**依赖项可以独立于消费者进行替换。
  3. **提高可测试性:**通过注入依赖项(特别是接口),您可以轻松地在单元测试中模拟依赖项。
  4. **简化管理:**依赖管理集中化,更易于更新和维护。

三.依赖注入在.NET Core 中如何工作?

.NET Core 提供了一个内置的 DI 容器,该容器在应用程序的 Startup 类中配置。它主要涉及三个步骤。

  1. **注册:**您向 DI 容器注册您的服务(依赖项)。
  2. **解决方案:**当需要某项服务时,会要求容器创建该服务的实例。
  3. **生命周期管理:**容器管理依赖项的生命周期(单例、范围、瞬态)。

四.示例

在 .NET Core Web 应用程序中实现 DI

让我们考虑一个使用 ASP.NET Core 管理用户消息的 Web 应用程序的简单示例。我们将实现一个接口来处理消息,然后将其注入到我们的控制器中。

步骤 1. 定义接口和实现

首先,我们定义一个接口 IMessageService,其中包含获取消息的方法。

public interface IMessageService
{string GetMessage();
}public class HelloMessageService : IMessageService
{public string GetMessage(){return "Hello from Dependency Injection!";}
}

步骤 2. 注册服务

在 Startup.cs 文件中,在 ConfigureServices 方法中使用 DI 容器注册 HelloMessageService。

public void ConfigureServices(IServiceCollection services)
{services.AddControllers();// Register the IMessageService with its implementationservices.AddSingleton<IMessageService, HelloMessageService>();
}

步骤 3.将服务注入控制器

现在,将 IMessageService 注入到控制器中。DI 容器负责处理服务实例的创建和注入。

public class HomeController : Controller
{private readonly IMessageService _messageService;public HomeController(IMessageService messageService){_messageService = messageService;}public IActionResult Index(){// Use the injected servicevar message = _messageService.GetMessage();return View("Index", message);}
}

五.结论

.NET Core 中的依赖注入简化了应用程序依赖项的管理,使您的应用程序更加模块化、可测试和可维护。通过使用内置的 DI 容器,.NET Core 开发人员可以以最小的努力实现更清晰的代码和更好的架构。

http://www.lryc.cn/news/424268.html

相关文章:

  • fetch、FormData上传多张图片
  • C++STL详解(五)——list类的具体实现
  • 鸿蒙(API 12 Beta3版)【使用投播组件】案例应用
  • 【STM32项目】在FreeRtos背景下的实战项目的实现过程(一)
  • C#垃圾处理机制相关笔记
  • C语言memcmp函数
  • 低代码: 组件库测试之Vue环境下的测试工具以及测试环境搭建
  • 【Vue3】高颜值后台管理模板推荐
  • 详细介绍Pytorch中torchvision的相关使用
  • AI部署——主流模型推理部署框架
  • PyTorch之loading fbgemm.dll异常的解决办法
  • Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法
  • 力扣热题100_回溯_78_子集
  • 浏览器如何工作(一)进程架构
  • 【LeetCode】两数之和
  • UE5学习笔记11-为拿取武器添加动画
  • 68. 文本左右对齐【 力扣(LeetCode) 】
  • 【中等】 猿人学web第一届 第6题 js混淆-回溯
  • 低、中、高频率段具体在不同应用中的范围是多少
  • Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧
  • Golang面试题四(并发编程)
  • 计算机学生高效记录并整理编程学习笔记的方法
  • 【书生大模型实战】L2-LMDeploy 量化部署实践闯关任务
  • 《编程学习笔记之道:构建知识宝库的秘诀》
  • DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers
  • untiy有渲染线程和逻辑线程嘛
  • 什么是数据仓库ODS层?为什么需要ODS层?
  • permutation sequence(
  • PCL 三线性插值
  • JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池