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

完结撒花~

相关推荐
光头闪亮亮3 小时前
电子发票解析工具-c#桌面应用开发-DataGridView表格控件使用详解
c#
周杰伦fans4 小时前
C# 中的 `Hashtable`
开发语言·c#
lingggggaaaa4 小时前
免杀对抗——C2远控篇&PowerShell&有无文件落地&C#参数调用&绕AMSI&ETW&去混淆特征
c语言·开发语言·笔记·学习·安全·microsoft·c#
咩图5 小时前
WPF+Prism8.0.0.1909+C#创建一个桌面程序
c#·wpf·prism
Charles_go5 小时前
C#中级45、什么是组合优于继承
开发语言·c#
我是唐青枫6 小时前
一文理解 C#.NET Tuples:从基础到高级应用
c#·.net
Charles_go7 小时前
C#中级46、什么是模拟
开发语言·oracle·c#
一只爱做笔记的码农7 小时前
【BootstrapBlazor】移植BootstrapBlazor VS工程到Vscode工程,报error blazor106的问题
笔记·学习·c#
曹牧11 小时前
C#:姓名脱敏
开发语言·c#
缺点内向11 小时前
C# 中 Word 文档目录的插入与删除指南
开发语言·c#·word·.net