zoukankan      html  css  js  c++  java
  • 控制反转_依赖注入简明教程

    在面向对象中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();
    }
    }
  • 相关阅读:
    AVL树入门
    hdu 3709 Balanced Number
    跟着病毒学技术--学习WannaCry自己实现LoadLirbrary
    Win7下64位扫雷逆向以及辅助制作
    Qt使用.lib静态库和.dll动态库文件
    X64调用规范
    “热补丁”Hook,多线程下InlineHook解决方法
    x86 x64下调用约定浅析
    配置Sublime Text3编译汇编并高亮代码
    反调试技术(一)--静态反调试
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778188.html
Copyright © 2011-2022 走看看