理解.NET IoC:依赖反转(DIP)、控制反转(IoC)与依赖注入(DI)
159 浏览量
更新于2024-08-30
1
收藏 64KB PDF 举报
.NET IoC模式依赖反转(DIP)、控制反转(IoC)和依赖注入(DI)是软件设计中的核心概念,它们在提升代码可扩展性、可维护性和可测试性方面起着至关重要的作用。
依赖倒置原则(DIP)是面向对象设计的基础之一,它提倡将依赖关系从具体实现转向抽象接口。DIP的两个主要规则是:
1. 高层次的模块不应依赖低层次的模块,两者都应依赖其共同的抽象接口。这确保了高层模块的独立性,降低因底层模块变动带来的影响。
2. 抽象接口不应依赖具体实现,而具体实现应依赖抽象接口。这允许在不影响其他组件的情况下添加、修改或替换具体实现。
在给定的代码示例中,`Ordering`类依赖于`SendingEmail`类来发送通知。当业务需求改变,比如需要发送短信而不是邮件时,我们必须直接修改`Ordering`类,这违背了DIP。正确的做法是定义一个抽象接口,如`ISending`,然后让`SendingEmail`和新的`SendingSMS`类实现这个接口。`Ordering`类只依赖于`ISending`接口,而不关心具体实现。这样,添加新需求时,只需更改依赖注入的实现,无需修改原有代码。
控制反转(IoC)是一种设计思想,它通过第三方容器来管理对象的创建和对象之间的依赖关系。在.NET框架中,IoC容器如 Autofac、Unity 和 Ninject 可以帮助我们实现这一目标。它们负责创建对象,根据配置决定何时以及如何将依赖注入到需要它们的类中。
依赖注入(DI)是IoC的一个具体实现,它允许我们在运行时将依赖关系传递给类,而不是由类自己去查找或创建。有三种常见的依赖注入方式:
- 构造函数注入:通过类的构造函数传递依赖。
- 属性注入:通过设置类的公共属性来注入依赖。
- 方法注入:通过调用类的方法来注入依赖。
在.NET中,.NET Core 自带了一个轻量级的IoC容器,可以方便地进行依赖注入的配置。例如,我们可以注册`ISending`接口及其实现,并在需要的地方通过构造函数注入依赖:
```csharp
services.AddSingleton<ISending, SendingEmail>();
// 或者在需求改变时,替换为
services.AddSingleton<ISending, SendingSMS>();
public class Ordering
{
private readonly ISending _sender;
public Ordering(ISending sender)
{
_sender = sender;
}
public void Order(string message)
{
// Order business operation
_sender.Send(message);
}
}
```
这样,`Ordering`类不再直接创建`SendingEmail`实例,而是通过构造函数接收依赖,实现了依赖的外部控制和反转。当需要更换发送方式时,只需要调整IoC容器的配置,而不需要修改`Ordering`类的代码,大大提高了代码的灵活性和可维护性。
2019-07-21 上传
2013-02-20 上传
2023-10-05 上传
2023-05-10 上传
2023-04-01 上传
2024-04-04 上传
2023-07-25 上传
2023-09-08 上传
weixin_38718415
- 粉丝: 10
- 资源: 951
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作