IOC控制反转和DI依赖注入

如果一个类A 的功能实现需要借助于类B,那么就称类B是类A的依赖,如果在类A的内部去实例化类B,那么两者之间会出现较高的耦合,一旦类B出现了问题,类A也需要进行改造。如下传统的代码结构:

        class A
        {
            B _bb;
            A()
            {
                _bb = new B();
            }
        }

如果这样的情况较多,每个类之间都有很多依赖,那么就会出现牵一发而动全身的情况,程序会极难维护,并且很容易出现问题。要解决这个问题,就要把A类对B类的控制权抽离出来,交给一个第三方去做,把控制权反转给第三方,就称作控制反转(IOC Inversion Of Control)。

控制反转是一种思想,是能够解决问题的一种可能的结果,而依赖注入(Dependency Injection)就是其最典型的实现方法。由第三方(我们称作IOC容器)来控制依赖,把他通过构造函数、属性或者工厂模式等方法,注入到类A内,这样就极大程度的对类A和类B进行了解耦。

比如使用了第三方依赖注入容器组件,在程序启动的时候,在组件中配置好:

services.AddSingleton<IB, B>();

这个意思就是,告诉容器组件,如果程序需要一个IB接口对象,你就new出来一个对象。此时,在A的实现类中,就可以改为:

        class A
        {
            B _bb;
            A(IB bb)
            {
                _bb = bb;
            }
        }

 

 OK,这样是不是就清晰了,很简单的。

 

 

 

添加评论

Loading