深入理解Dip Ioc Di以及Ioc容器
学习 http://www.cnblogs.com/liuhaorain/p/3747470.html
DIP 依赖倒置: 一种软件架构设计的原则(抽象概念)。
IOC控制反转:一种反转流、依赖和接口的方式(DIP的具体实现方式)。
DI依赖注入:IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。
Ioc容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。
DIP 一种软件架构设计原则
依赖倒置原则: 底层模块依赖高层模块定义的接口 高层模块不受底层模块影响。 高层模块定义接口 底层模块负责实现高层模块定义的接口 。
高层模块不应依赖于低层模块,两者应该依赖于抽象。
抽象不不应该依赖于实现,实现应该依赖于抽象。
IOC 控制反转 软件设计模式
控制反转 高层将依赖的底层对象的获得交给第三方来控制,即依赖对象不在被依赖对象内通过new方式获取。
软件设计原则:原则 提供指南,告诉我们对,错。它仅给准则,以便我们可以设计好的软件,避免不良的设计。一些常见的原则,比如DRY、OCP、DIP等。
软件设计模式:模式是在软件开发过程中总结得出的一些可重用的解决方案,它能解决一些实际的问题。一些常见的模式,比如工厂模式、单例模式等等。
依赖注入 有两种常用方式 依赖注入和服务定位。其中,依赖注入使用最为广泛
DI依赖注入 是一种机制 将需要依赖(底层模块)对象的引用传递给被依赖(高层模块)对象。
构造函数注入法:通过构造函数传递依赖。构造函数的参数必须有一个用来接收一个依赖对象,那么参数类型是? 高层模块不应该依赖底层模块,那就应该是一个抽象类。 所以构造函数应该有一个抽象参数来接收依赖。
属性注入:通过属性传递依赖
接口注入:高层次依赖模块 提供接口来完成 底层模块的注入。
前面几种方式,我们都是通过手动的方式来创建依赖对象,并将引用传递给被依赖模块。比如:
对于大型项目来说,相互依赖的组件比较多。如果还用手动的方式,自己来创建和注入依赖的话,显然效率很低,而且往往还会出现不可控的场面。正因如此,IoC容器诞生了。IoC容器实际上是一个DI框架,它能简化我们的工作量。它包含以下几个功能:
- 动态创建、注入依赖对象。
- 管理对象生命周期。
- 映射依赖关系。
1. Ninject: http://www.ninject.org/
2. Castle Windsor: http://www.castleproject.org/container/index.html
3. Autofac: http://code.google.com/p/autofac/
4. StructureMap: http://docs.structuremap.net/
5. Unity: http://unity.codeplex.com/
6. MEF: http://msdn.microsoft.com/zh-cn/library/dd460648.aspx
7. Spring.NET: http://www.springframework.net/
8. LightInject: http://www.lightinject.net/