控制反转_依赖注入简明教程

简介: 控制反转_依赖注入简明教程

在面向对象中IOC是一个重要的设计思想。这篇文章将带领大家快速掌握控制反转和依赖注入。


注:代码基于c#


零、Ioc

Ioc 英文是 Inversion of Control,中文是控制反转。所谓控制反转,就是A类中有对B类方法的调用,我们调用之前一般都会先new,这样就增加了类和类之间的耦合度。为了降低耦合度,将A类对B类的的控制权交给Ioc容器,让双方都依赖Ioc容器。

一、DI

DI 的英文是 Dependency Injection,中文是依赖注入。依赖注入是实现Ioc的一种方式,也是常用的方式。依赖注入的方式主要有三种:构造函数注入接口注入属性注入。(因为这篇文章知识一个简单的入门,因此我们不讲解这三种注入)我们来通过一个例子,来看一下依赖注入的好处:


故事:小吴是一个公司的CEO,每天都需要司机开车送他上下班,开始他只有一个司机,每次司机生病,他就只能自己开车上下班。因此小吴设立了一个司机部门,部门中有多名司机,由司机部门给小吴指派司机。


分析:从上面的故事可以分析得出,刚开始小吴是依赖者,司机是被依赖者,小吴依赖于小刚。后来通过增加司机部门这个Ioc容器,

小吴和小刚之间的关系变为了,小吴依赖于司机部门。


我们通过代码看一下(这里使用到了 .NET 依赖注入容器 AutoFac):

static void Main(string[] args)
{
    //接小吴
    IContainer driverCont = DriverDepartment();
    //司机部门分配一个司机给CEO小吴
    CE0_Wu wu = driverCont.Resolve<CE0_Wu>();
    wu.Car();
    Console.Read();
}
/// <summary>
/// 司机部门
/// </summary>
/// <returns></returns>
private static IContainer DriverDepartment()
{
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<CE0_Wu>();
    builder.RegisterType<Driver>().As<IDriver>();
    return builder.Build();
}
}
/// <summary>
/// 抽象以来
/// </summary>
public class Driver : IDriver
{
/// <summary>
/// 开车
/// </summary>
public void Drive()
{
    Console.WriteLine("开车送老板");
}
}
public interface IDriver
{
void Drive();
}
/// <summary>
/// 小吴
/// </summary>
public class CE0_Wu
{
private IDriver driver;
public CE0_Wu(IDriver driver)
{
    this.driver = driver;
}
public void Car()
{
    driver.Drive();
}
}


目录
相关文章
|
6月前
|
XML Java 数据格式
从六个方面读懂IoC(控制反转)和DI(依赖注入)
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring IOC的理解。
210 2
|
3月前
|
设计模式 测试技术 容器
依赖注入与控制反转:理解与应用
【8月更文挑战第22天】
129 0
|
5月前
|
Java 调度 容器
心得经验总结:控制反转(IoC)
心得经验总结:控制反转(IoC)
41 0
|
6月前
|
XML Java 程序员
Spring特性之二——IOC控制反转
Spring特性之二——IOC控制反转
57 4
|
Java 容器 Spring
[javaweb]——spring框架之控制反转(IOC)与依赖注入(DI)
[javaweb]——spring框架之控制反转(IOC)与依赖注入(DI)
|
XML 图形学 数据格式
IOC控制反转——基础概念与实例
IOC控制反转——基础概念与实例
|
设计模式
依赖倒置,控制反转,依赖注入 其实很简单
上层模块不应该依赖于底层模块,它们都应该依赖于抽象 抽象不应该依赖于细节,细节应该依赖于抽象
117 0
|
程序员 容器
控制反转与依赖注入
控制反转与依赖注入
129 0
控制反转与依赖注入
|
运维 Java vr&ar
控制反转|学习笔记
快速学习控制反转
控制反转|学习笔记
|
XML JavaScript Java
阅读Spring源码:IOC控制反转前的处理
阅读Spring源码:IOC控制反转前的处理
127 0
阅读Spring源码:IOC控制反转前的处理