控制反转 依赖注入 依赖倒置 Ioc容器

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/83043207

上家公司模块间的解耦是通过解析XML+反射实现的,我由于之前学习了《Android源码设计模式》这本书,所以认定它是一种依赖注入,但是有一次面试问我什么是依赖注入及其实现,我不知道了。这是我要写本文的理由。

要学习3个东西:

1.《Android源码设计模式》书上的那一章节

2.控制反转与依赖注入的概念

3.依赖注入的3种实现方式

学习自

https://www.cnblogs.com/chenwolong/p/DI.html

依赖倒置

例子:只要有银行卡,不管在哪个ATM机都能取到钱。ATM机是高层模块,银行卡是低层模块。ATM机提供了一个接口,只要银行卡是实现这个接口的,就可以取钱。

这样一来懂了吧——高层模块不依赖底层模块的细节,这是怎么实现的呢?接口。假如你每次实例化的都是具体的类,那么这就是依赖了底层模块。但是如果你依赖的是接口,就不再是依赖底层模块了,这就是依赖倒置。

依赖未倒置的样子

底层模块各自的实现是我们需要了解的

依赖倒置后

抽象出了公共的特性成为一个抽象,高层模块只和这个接口交流。这个接口可以通过外部注入的形式来得到。(说了这么多高层模块是啥,高层模块就是使用者啦 。。。)

优点如下

控制反转

基于上面的依赖倒置,高层模块不再依赖低层模块的细节了,依赖于抽象,但是这个抽象从何而来?可以让使用者手动注入,也可以依赖于容器注入。

依赖注入

先看一个例子

public class Order
{
        private readonly AccessDal dal = new AccessDal();//添加一个私有变量保存数据库操作的对象
 
         public void Add()
       {
           dal.Add();
       }
}

AccessDal是数据库,可以看到,如果不再使用这个数据库了,又要去修改这个类的代码,很不好。所以需要依赖倒置,依赖抽象;控制反转,让第三方容器来注入,其实现就是依赖注入。

可以通过

方法1,构造函数注入

方法2,属性注入

方法3,定义set方法的接口,接口注入

上述都是手动注入,可以通过控制反转Ioc容器来进行,它替你做的工作大致有:

  • 动态创建、注入依赖对象。
  • 管理对象生命周期。
  • 映射依赖关系。

其实无非就是:原来你手动注入的是AccessDal数据库这个类,你现在只需要输入一个String即可,底层会通过反射来自动替我们生成,原理其实很简单。

猜你喜欢

转载自blog.csdn.net/qq_36523667/article/details/83043207