全部博文(372)
2012年(372)
分类: 虚拟化
2012-04-26 20:25:16
NInject介绍
Ninject是基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject软件架构,会使你的代码变得更加容易编写、重用性强、易于测试和修改。
逐步解说
1、手动依赖性注入
首先让通过一个简单的例子理解下依赖注入的思想。比如说你正在一个游戏,勇士们为荣耀而战。首先我们需要合适的兵器武装我们的勇士。我们先创建Sword(剑)。
接着,我们创建类Samurai来描述我们的勇士。为了攻击他们的敌人,我们需要创建一个攻击方法Attack。当这个方法被调用,勇士就会用他的剑攻击他的对手。
现在我们就可以创建我们的勇士并且战斗了。
这时控制台会输出“Chopped the evildoers clean in half to the console”。这个工程刚刚好,但是如果我们想用其它的武器武装我们的勇士,该如何做呢?因为Sword 对象在Samurai的构造函数中被创建,所以我们不得不修改类的实现。
当一个类依赖一个实体,被叫做紧耦合。在这个例子里,Samurai类相对于Sword类是紧耦合的。当类是紧耦合,在没有改变实现的情况下,被依赖项是不能别交换的。为了避免紧耦合,我们可以使用接口提供间接层。创建一个接口来描述一个勇士。
接下来我们的Sword 类继承Iweapon接口
修改我们的 Samurai 类
现在勇士可以使用不同的兵器了。但是Sword还是在Samurai的构造函数中被创建了。为了让Sword勇士使用其它的兵器,我们还是要修改类的实现。Samurai 类相对于Sword类还是紧耦合的。
幸运的,有个更简单的解决方案。那就是把Sword作为参数传递给Samurai的构造函数。
这时候我们可以凭借Samurai的构造函数进行注入。这是个依赖性注入的例子。让我们再创建个其它的兵器(weapon)镖,给我们的勇士(Samurai)使用。
我们可以创建一个军队
输出结果如下:
这就是手动依赖性注入。你每次创建一个Samurai,首先要创建一些实现了IWeapon接口的对象,传递给Samurai的构造函数。现在我们改变勇士使用的武器,就不用再修改Samurai类了。Samurai是被分离出来的,我们就创建新的武器而不关系Samurai的代码。
手动依赖性注入对小的项目来说是有效的策略,但是随着你应用程序的大小和复杂性的增长,关联对象将变得越来越臃肿。当依赖有自己的依赖会发生什么呢?你可以终止花费大量的时间来创建和关联对象,用更多的时候写有意义的代码。
这就是Ninject可以帮助你的地方。
总结:英语学的不好,费劲啊!!!翻译不好的地方还请大家多多指教。
英文链接地址:
转自: