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

完结撒花~

相关推荐
hixiong1237 小时前
C# OpencvSharp使用lpd_yunet进行车牌检测
开发语言·opencv·计算机视觉·c#
许泽宇的技术分享8 小时前
让数据库“听懂“人话:Text2Sql.Net 深度技术解析
数据库·.net
专注VB编程开发20年9 小时前
.net c#音频放大,音量增益算法防止溢出
算法·c#·音频处理·录音·音量增益·增益控制
专注VB编程开发20年9 小时前
.NET Reflector反编绎,如何移除DLL中的一个公开属性
开发语言·c++·c#
葡萄城技术团队9 小时前
在 .NET AI 聊天应用中升级到 Microsoft 代理框架
.net
唐青枫11 小时前
C#.NET Random 深入解析:随机数生成原理与最佳实践
c#·.net
永远有缘12 小时前
Java、Python、C# 和 C++ 在函数定义语法上的主要区别
java·c++·python·c#
JosieBook16 小时前
【.NET】WinForm中如何调整DataGridView控件的列宽?
.net
yue00819 小时前
C#理论学习-WinForm实践开发教程总结
开发语言·学习·c#