Asp.net MVC示例项目“Suteki.Shop”分析之IOC(控制反转)
在Suteki.Shop中,未使用微软自已的Unity框架来实现IOC,而是使用了大名鼎鼎Castle Windsor。 因为引用了Windsor,就有必要简要介绍一下。而我的理解,这个IOC容器(Container)包括下 面几个重要概念: 容器(Container):Windsor是一个反转控制容器。它创建在一个微内核的基 础之上,这个微内核能够扫描类并且试图找到这些类用到哪些对象引用、对象依赖,然后把这些依赖信 息提供给类使用。 组件(Component):也就是我们通常所说的业务逻辑单元及相应的功能实现 ,组件是一个可复用的代码单元。它应该实现并暴露为一个服务。组件是实现一个服务或接口的类。 服务(Service) :也就是相应的组件接口或N个Component按业务逻辑组合而成的业务逻辑接口 。 接口是服务的规范,它创建一个抽象层,你可以轻松的替换服务的实现。 扩张单元插 件(Facilities):提供(可扩张)容器以管理组件。 我们可以直接使用组件(会在下 面的内容中提到),也可以把组件转换成相应的服务接口来使用。 还记得上一篇文章中提到的 Service吗? 说白了,它就是一个服务。而Suteki.Shop做的更“夸张”,只要是带有业务逻 辑性质的功能代码都可以被视为Component或服务,比如说前几篇文章中所提到的Filter,ModelBinder。 甚至是服务组件初始化的辅助类(WindsorServiceLocator)也一并拿下。 为了便于理解,下面 就到Suteki.Shop中看一下其是如何做的:) 首先我们看一下整个Suteki.Shop项目启动的入口,同 时这也是Windsor IOC容器初始化的起点。而这块功能代码是放在了Global.asax (Suteki.Shop\Global.asax)中的Application_Start方法中实现的,下面是该方法的声明:
代码中的RouteManager.RegisterRoutes是实现对Route规则的绑定,而规则的内容是被 硬编码到RouteManager中实现的。关于Route的资料网上有不少,园子里也有不少朋友写过,这里就不做 说明了。 接就上面方法就会运行InitializeWindsor(),这就是Windsor容器初始化的方法:
注: “Configuration\\Windsor.config”中的内容较长,主要是一些XML配置节点。大家可以抽 时间阅读一下即可。 这个方法是今天讲解的主要内容,下面就介绍一下其中的代码。 首 先是判断container(IWindsorContainer类型)是否为空,如果容器为空则创建并初始化该容器。也就 是调用ContainerBuilder(Suteki.Shop\ContainerBuilder)类的Build方法来从外部的config文件中加 载默认信息。我们这里就看一下Build方法的实现:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |