首页 新闻 会员 周边

依赖注入这个词怎么理解

0
[已解决问题] 解决于 2012-03-23 10:49

依赖注入这个词怎么理解,依赖注入

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2012-03-22 16:37
< >
分享
最佳答案
6

举个例子,组件A中有类ClassA,组件B中有接口IB和其对应的实现类B1和B2。

那么,现在ClassA需要利用IB接口来做一些事情,例如:

public class ClassA {
public void DoSomething() {
IB b = ???
b.DoWork();
}
}

现在的问题来了,IB b = ??? 中这三个???要写什么代码?是要写成 IB b = new B1(),还是要写成IB b = new B2() ?

不管是哪一种,都会让ClassA强依赖于IB的实现。

在上面这种方案中,ClassA通过new一个B1或B2来实现对IB的依赖的获取,换句话说,ClassA在主动获取依赖。

这样的设计会让ClassA很难扩展,那我们要改良设计:使用依赖注入。上面说到了,问题出在new这里,也就是依赖是Class去主动获取的,那我们就要解决这个问题:不要去主动获取对IB的依赖(通过new),而让这个依赖从ClassA的外面“注入”进来。注入有多种方式,比较常用的一种是通过构造函数注入,那么,我们要把ClassA改成:

public class ClassA {
private IB b;

public ClassA(IB b) {
this.b = b;
}

public DoSomething() {
this.b.DoWork();
}
}

可以看到,通过把IB这个依赖从构造函数中“注”进来后,ClassA就不依赖IB的实现了。还可以发现,这个重构过程中,我们是把"ClassA主动获取对IB的依赖”变成“把对IB的依赖从外部注入到ClassA中”,依赖的方向反转了,所以,依赖注入又称“控制反转”。

上面是依赖注入的所有内容。依赖注入不涉及任何反射、IoC框架(如Unity, Autofac)等内容。要注意这点。

水言木 | 小虾三级 |园豆:586 | 2012-03-22 18:14

讲的很清楚

不负春光,努力生长 | 园豆:1382 (小虾三级) | 2015-08-19 19:45
其他回答(2)
0

  IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

我是用了才理解的,实验是最好的学习方式。

today4king | 园豆:3499 (老鸟四级) | 2012-03-22 17:10
0

一图胜千言(a picture is worth a thousand words)

想看千言,请走这里:http://msdn.microsoft.com/en-us/library/ff921152(v=pandp.20).aspx

dudu | 园豆:30994 (高人七级) | 2012-03-22 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册