(译)Windsor入门教程---第二部分 引用Windsor
2014-05-25 23:59
417 查看
原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx
控制器工厂是处理任何与容器显式交互的地方(除了我们会在Global.asax文件中引导容器)。这的确人很多人感到惊讶并难以致信,如果你也不信,那么请相信我的话的,你会看到它是如何工作,如何利用控制反转(模式)来让这一切成为可能!
控制器工厂是一个底层类,甚至你从来没有在你的代码里调用过。为了显示的调用,我在解决方案里添加了 Plumbing 文件夹,并且在此文件夹里添加了一个WindsorControllerFactory.cs类,这个类继承了MVC的默认控制器工厂类DefaultControllerFactory,并且重写了它的两个方法:
我们使用工厂的基类We leverage the base implementation of the factory to figure out based on the route which controller type should handle the request,在某些情况下,当编译器找不到控制器而报错的时候,我们会返回404错误,同时还会释放控制器。
介绍
在第一部分我们创建了一个mvc应用程序,并且已经添加了Windsor,但是还没有使用它。为了使用Windsor我们需要在应用程序中添加引用。首先我们来看的是控制器工厂,我们将用它来管理我们的控制器和所有其他的依赖项。控制器工厂
和其他框架不同,IoC容器就像是一个网络管理员。如果它不出错(前提是你正确的使用),你都不会注意到它。换句话说,我们不会直接的去调用容器也不会和它的API交互,就像你平时根本没注意到你使用了日志处理框架、表现层框架(例如:ASP.NET MVC)或者是持久性框架(例如:NHibernate)。控制器工厂是处理任何与容器显式交互的地方(除了我们会在Global.asax文件中引导容器)。这的确人很多人感到惊讶并难以致信,如果你也不信,那么请相信我的话的,你会看到它是如何工作,如何利用控制反转(模式)来让这一切成为可能!
控制器工厂是一个底层类,甚至你从来没有在你的代码里调用过。为了显示的调用,我在解决方案里添加了 Plumbing 文件夹,并且在此文件夹里添加了一个WindsorControllerFactory.cs类,这个类继承了MVC的默认控制器工厂类DefaultControllerFactory,并且重写了它的两个方法:
using Castle.MicroKernel; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace WindsorTutorial.Plumbing { public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKernel kernel; public WindsorControllerFactory(IKernel kernel) { this.kernel = kernel; } public override void ReleaseController(IController controller) { kernel.ReleaseComponent(controller); } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { if (controllerType == null) { throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path)); } return (IController)kernel.Resolve(controllerType); } } }
Windsor控制器工厂
控制器工厂有两个职责:1、为mvc运行时提供每一次请求的控制器实力;2、当请求结束后释放控制器。为此我们使用基于Ikernel的Windsor,一个我们使用Windsor为我们处理服务接口,同时在我们使用完毕之后释放他们。我们使用工厂的基类We leverage the base implementation of the factory to figure out based on the route which controller type should handle the request,在某些情况下,当编译器找不到控制器而报错的时候,我们会返回404错误,同时还会释放控制器。
总结
在这一部分,我们在应用程序中创建了一个控制器工厂利用Windsor来管理组件。在下一部分我们会将它整合到我们的应用程序,将组件管理交给Windsor。相关文章推荐
- (译)Windsor入门教程---第四部分 整合
- Macriomedia Flex入门教程第二部分――创建一个简单的计算器
- (译)Windsor入门教程---第五部分 添加日志功能
- [ReactiveCocoa]入门教程:第二部分
- RabbitMQ官方中文入门教程(PHP版) 第二部分:工作队列(Work queues)
- (译)Windsor入门教程---第一部分 获取Windsor
- RabbitMQ官方中文入门教程(PHP版) 第二部分:工作队列(Work queues)
- RabbitMQ官方中文入门教程(PHP版) 第二部分:工作队列(Work queues)
- ReactiveCocoa入门教程:第二部分
- ReactiveCocoa入门教程:第二部分
- (译)Windsor入门教程---第三部分 编写第一个Installer
- 易语言新手入门教程第十四课 - QQ自动登录器第二部分
- ReactiveCocoa入门教程:第二部分
- 蒋国纲 COM入门第二部分
- WPF教程(译文)(第二部分)
- Nutch入门教程,第一部分
- Silverlight 教程第二部分:使用布局管理 (木野狐译)
- SQL语言入门教程:第二课创建表格
- Sun JNDI教程翻译 第二部分 Naming Operations
- Silverlight 教程第二部分:使用布局管理 (木野狐译)