1、IoC(Inversion of Control)
IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。
这和开发者直接调用API代码是相反的,因此,框架反转控制,也就是说对象的创建是由框架自己在某种时候创建。
也许你在哪里已经应用了上面的原则,知识你还没有意识到这一点。
2、Inversion of Control Container
人们常常认为Inversion of Control(控制反转)和Inversion of Control Container所表达的意思是差不多的,事实上Inversion of Control是一个更广义的概念。
人们常说的“注入”是容器控制反转的最主要的用法,这大大的降低了系统的耦合度,简化了重用性和可测试性。
3、Services, Components and Dependencies(服务、组件、依赖)
有一张很好的图形容:
(1)services通常是一个抽象的概念,就像你去咖啡店想要一杯咖啡的服务,你不用关心咖啡豆的大小,用的什么机器。因此
你经常会发现您的服务将被定义为接口,接口是通过定义抽象的和有没有实现的。
public interface ICoffeeShop{ FutureGetCoffee(CoffeeRequest request);}
(2)Component与服务是有关的,服务是一个抽象的概念,他是不会给你咖啡的,而我们在一个真实的世界中,因此你需要到一个实际的咖啡店中完成这项服务。在C#中通常是指实现服务的类。
public class Starbucks: ICoffeeShop{ public FutureGetCoffee(CoffeeRequest request) { // some implementation }}
我们要记住正如城里可以有很多家咖啡店,一个服务可以被很多组件实现(就像一家是星巴克,一家是CofeeClub)。
一家咖啡店还以同时卖面包和烤肠,一个组件可以实现多个服务。
(3)Dependency
组件是为了实现服务而存在的,就像一家咖啡店依赖于一些公共服务(电力),还有其供应商提供的豆子和牛奶,所以组件要做的事情最终还是要委派与一些非本质的方面。
现在我要重复一件很明显的事情,那就是组件要依赖于其他服务的组件,这样就可以很好的解耦你的咖啡店和牛奶送货员是如何操作的。
你的组件除了可能依赖于其他服务的组件,还可能依赖于一些 connectionStrings和一些属性配置等等。
在C#中依赖通常是通过构造函数和属性注入的,在一些高级的场景,组件和你执行的类没有关系。
4、Putting it all together
我们把他们放在一起,就是一个高效容器的特点,小组件,定义良好,实现少,抽象服务,依赖于其他组件以及一些配置文件,执行一些服务的规约。
你最终会得到很多小的,解耦的组件,这将允许你快速的改变和完善在一些特殊需求情况下。缺点就是你会有很多组件和依赖需要管理。
这就是容器的工作内容。
不断完善中,敬请期待!