【.NET】依赖注入浅显解释

依赖注入 是一种设计模式,它将对象的依赖(例如服务或组件)从对象内部解耦出来,由外部提供。在 C# 中,通常通过 构造函数注入属性注入方法注入 来实现依赖注入。常用的 DI 容器如 Autofac 和 Microsoft.Extensions.DependencyInjection。
大白话: 假如一个类需要另外独立的功能,比如发送邮件,正常情况在这个类中创建发送邮件的类(也可以说依赖,主要是强调两者关系)

csharp 复制代码
public class OrderService
{
    private readonly Logger _logger = new Logger(); // 直接创建依赖
}

但是这样操作耦合性高,比如现在想修改 Logger(),改成FileLogger,那么就需要修改OrderService。

此时使用依赖注入,如下代码

csharp 复制代码
public class OrderService
{
    private readonly ILogger _logger;

    public OrderService(ILogger logger)
    {
        _logger = logger;
    }
}
csharp 复制代码
// 使用
class Program
{
    static void Main()
    {
        ILogger logger = new ConsoleLogger();  //如果想改成其他的类,直接在这里替换掉就可以,无需改动OrderService 内部代码
        OrderService service = new OrderService(logger);
        service.CreateOrder("123");
    }
}

将logger作为一个参数传过来,那么无论logger怎么改动,都不需要改OrderService(耦合度低),这就是构造函数注入。属性注入(定义一个参数)和方法注入(作为方法参数传进来)类似。

完结撒花~

相关推荐
wujian831111 小时前
怎么用千问生成word文档:从「格式崩」到「一键过」,AI导出鸭打通最后半厘米
人工智能·ai·c#·word·豆包·deepseek·ai导出鸭
zlinear数据采集卡12 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
唐青枫13 小时前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
zlinear数据采集卡16 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
花落人散处19 小时前
CDiskClean 开发历程 —— 文件清理_目录树解析实现方案参考
c#
离陌在学C#19 小时前
C# 泛型:从基础到高级应用
开发语言·c#
Vertira20 小时前
C# 与 OpencvSharp 编程[基础目录]
c#
格林威1 天前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
yuhulkjv3351 天前
Claude表格复制到word不再崩溃,AI导出鸭批量导出+格式无损一键搞定
人工智能·ai·c#·word·ai导出鸭