当前位置:首页 > C# > 正文

深入理解 C# 依赖注入(使用 Microsoft.Extensions.DependencyInjection 构建松耦合应用)

在现代 C# 开发中,尤其是使用 .NET Core 或 .NET 5+ 进行应用程序构建时,依赖注入(Dependency Injection, 简称 DI) 已成为标准实践。而 Microsoft.Extensions.DependencyInjection 是微软官方提供的轻量级、高性能的依赖注入容器,广泛用于 ASP.NET Core、控制台应用、WPF、MAUI 等各类项目中。

本文将带你从零开始,手把手教你如何使用 Microsoft.Extensions.DependencyInjection 实现 C# 依赖注入,即使是编程新手也能轻松上手!

深入理解 C# 依赖注入(使用 Microsoft.Extensions.DependencyInjection 构建松耦合应用)  C#依赖注入 .NET Core DI容器 IoC教程 第1张

什么是依赖注入?

依赖注入是一种设计模式,用于实现控制反转(Inversion of Control, IoC)。它允许我们将对象的创建和依赖关系交给外部容器管理,而不是在类内部硬编码创建依赖对象。这样做的好处包括:

  • 降低代码耦合度
  • 提高可测试性(便于单元测试)
  • 增强代码可维护性和可扩展性

第一步:安装 NuGet 包

首先,你需要在你的 C# 项目中安装 Microsoft.Extensions.DependencyInjection 包。如果你使用的是 .NET 6+ 的控制台应用或 ASP.NET Core 项目,该包通常已默认包含。

若未包含,可通过以下命令安装:

dotnet add package Microsoft.Extensions.DependencyInjection

第二步:定义服务接口与实现

我们先创建一个简单的服务接口和其实现类:

// 定义服务接口public interface IEmailService{    void SendEmail(string to, string message);}// 实现服务class SmtpEmailService : IEmailService{    public void SendEmail(string to, string message)    {        Console.WriteLine($"[SMTP] 发送邮件给 {to}: {message}");    }}// 另一个实现(用于演示切换实现)class MockEmailService : IEmailService{    public void SendEmail(string to, string message)    {        Console.WriteLine($"[MOCK] 模拟发送邮件给 {to}: {message}");    }}

第三步:注册服务到 DI 容器

接下来,在程序入口(如 Main 方法)中配置依赖注入容器:

using Microsoft.Extensions.DependencyInjection;var services = new ServiceCollection();// 注册服务:这里使用瞬态(Transient)生命周期services.AddTransient<IEmailService, SmtpEmailService>();// 构建服务提供者(即 DI 容器)var serviceProvider = services.BuildServiceProvider();

注意:AddTransient 表示每次请求服务时都会创建一个新实例。你还可以使用:

  • AddScoped:在同一个作用域内共享一个实例(常用于 Web 请求)
  • AddSingleton:整个应用生命周期只创建一次实例

第四步:从容器中解析并使用服务

现在,你可以通过 serviceProvider 获取服务实例并使用:

// 解析服务var emailService = serviceProvider.GetService<IEmailService>();// 使用服务emailService?.SendEmail("user@example.com", "你好,这是一封测试邮件!");

完整示例代码

以下是完整的控制台程序示例:

using Microsoft.Extensions.DependencyInjection;// 接口与实现(略,见上文)class Program{    static void Main(string[] args)    {        var services = new ServiceCollection();        services.AddTransient<IEmailService, SmtpEmailService>();        var serviceProvider = services.BuildServiceProvider();        var emailService = serviceProvider.GetService<IEmailService>();        emailService?.SendEmail("test@example.com", "欢迎使用 C# 依赖注入!");    }}

为什么选择 Microsoft.Extensions.DependencyInjection?

作为 .NET 生态的标准 DI 容器,Microsoft.Extensions.DependencyInjection 具有以下优势:

  • 轻量、高性能,无额外依赖
  • 与 ASP.NET Core 深度集成
  • 支持多种生命周期管理
  • 社区支持广泛,文档丰富

结语

通过本教程,你已经掌握了如何在 C# 项目中使用 Microsoft.Extensions.DependencyInjection 实现依赖注入。无论你是开发 Web 应用、桌面软件还是后台服务,合理使用 DI 都能显著提升代码质量。

记住关键词:C#依赖注入.NET Core DI容器Microsoft.Extensions.DependencyInjectionC# IoC教程,它们将帮助你在后续学习和工作中快速定位相关资源。

赶快动手试试吧!让依赖注入成为你 C# 编程的得力助手!