【.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(耦合度低),这就是构造函数注入。属性注入(定义一个参数)和方法注入(作为方法参数传进来)类似。

完结撒花~

相关推荐
geovindu2 小时前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云
geovindu3 小时前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
格林威6 小时前
C# 相机图像阴影校正:使用OpenCvSharp实现工业相机阴影平场校正功能
人工智能·数码相机·opencv·计算机视觉·c#·机器视觉·工业相机
俊昭喜喜里6 小时前
c#中的构造函数
开发语言·数据库·c#
hahaha60167 小时前
HLS高层次综合设计--axi之burst纠偏
开发语言·算法·fpga开发·c#
谈资一本本8 小时前
电脑全能修复大师 Gilisoft Total Repair,智能检测修复系统、应用、游戏问题!DLL、DirectX、.NET运行库损坏修复+缺失自动补齐!
游戏·电脑·.net
点心的游戏开发世界15 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
淡海水17 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
点心的游戏开发世界17 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
公子小六21 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms