首页 > 其他分享 >通过示例了解 .NET Core 中的依赖注入

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

时间:2024-08-11 16:58:25浏览次数:14  
标签:Core 依赖 DI 示例 IMessageService NET 注入

依赖注入 (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 implementation
    services.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 service
        var message = _messageService.GetMessage();
        return View("Index", message);
    }
}

五.结论

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

标签:Core,依赖,DI,示例,IMessageService,NET,注入
From: https://blog.csdn.net/xiefeng240601/article/details/141064981

相关文章

  • Kubernetes-Init容器与静态Pod
    目录Init容器什么是Init容器?理解init容器Init容器与普通容器的不同之处静态Pod通过配置文件创建Init容器在Pod的生命周期中,可以执行多种操作如下图:什么是Init容器?Init容器也就是我们平时常说的初始化容器。InitContainer就是用来做初始化工作的容器,可以是一个或者多个,如果有......
  • 项目管理工具Maven的简单配置示例
    Maven是一个强大的项目管理工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。以下是一些关于Maven的具体例子,涵盖了项目配置、依赖管理、插件使用等方面:1.Maven项目基础配置Maven项目的基础配置通常体现在pom.xml文件中,该文件是Maven项目的核......
  • kubernetes-POD的基本原理
    目录什么是POD?POD有以下特点:为什么使用POD作为最小单元,而不是container为什么允许一个POD里有多个容器POD中如何管理多个容器POD的yaml格式定义配置文件说明如何使用PodPOD的持久性和终止Pause我们首先在节点上运行一个pause容器然后再运行一个nginx容器,nginx将为localhost:2368......
  • .NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权
    在.NET8.0中使用JWT(JSONWebToken)进行身份验证和授权,通常需要以下几个步骤:安装必要的NuGet包:Microsoft.AspNetCore.Authentication.JwtBearer配置JWT认证:在Program.cs或Startup.cs中配置JWT认证。生成和验证JWT:创建一个方法来生成JWT。在控制器中使用JWT......
  • 在 .NET 8.0 中,授权策略
    在.NET8.0中,授权策略(AuthorizationPolicies)是一种强大的机制,用于定义和应用复杂的授权规则。授权策略可以基于用户角色、声明、自定义要求等来控制对资源的访问。以下是如何在.NET8.0中配置和使用授权策略的步骤:安装必要的NuGet包确保你已经安装了Microsoft.AspNet......
  • iOS的CoreImage框架技术详解
    CoreImage提供图像处理、人脸识别、图像增强、图像滤镜、图像转场。它操作的数据来自CoreGraphics、CoreVideo、ImageIO,使用CPU或GPU进行渲染。CoreImage对底层实现进行封装,为上层提供简单易用的API。一、CoreImage框架CoreImage框架分为:渲染层、处理层、API层。其中,渲染......
  • AI在医学领域:nnSynergyNet3D高精度分割肝硬化肝脏体MRI图像
    关键词:肝硬化肝脏分割、协同深度学习模型、跨模态泛化    肝硬化是慢性肝病(CLD)的最后阶段,是一个重大的全球性健康问题。2019年,它是全球死亡原因的第11位,占全球死亡人数的2.4%。尽管病毒性肝炎仍然是终末期肝病的主要原因,但与代谢功能障碍相关的脂肪肝病(MASLD)预计将由于......
  • Node.JS - 基础(示例代码)
    目录A.Hello1.创建js文件2.编写代码3.编译4.输出结果B.建立HTTP服务器C. 异步式I/O与事件式编程D.模块和包E.调试A.Hello1.创建js文件使用VSCode创建一个.js文件,比如2.编写代码打印logconsole.log("Hello");3.编译4.输出结果B.建立HTTP服务......
  • 【云原生之kubernetes实战】在k8s环境下部署Note Mark笔记工具
    【云原生之kubernetes实战】在k8s环境下部署NoteMark笔记工具一、NoteMark介绍1.1NoteMark简介1.2NoteMark特点1.3NoteMark使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.2k8s存储介绍三、检查k8s环境3.1检查工作节点状态3......
  • 【K8s】专题九:Kubernetes 常用命令汇总
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录写在前边一、集群相关1、查看集群信息2、查看集群服务3、查看集群组件4、查看集群版本5、查看集群API版本二、节点相关1、查看节点状态2......