(译)Windsor入门教程---第二部分 引用Windsor
介绍
在第一部分我们创建了一个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(, 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入门教程---第二部分 引用Windsor的更多相关文章
- (译)Windsor入门教程---第一部分 获取Windsor
原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...
- iOS开发 ReactiveCocoa入门教程 第二部分
ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使用函数响应式(FRP)技术.加上第一部分的讲解,你将会学会如何使用信号量(对事件发出数据流)如何替代标准的动作和事件处理逻辑.你也会 ...
- ReactiveCocoa入门教程--第二部分
翻译自:http://www.raywenderlich.com/62796/reactivecocoa-tutorial-pt2 ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使 ...
- (译)Windsor入门教程---第五部分 添加日志功能
介绍 现在我们已经有了基础的框架了,是时候添加内容了,那么我们首先应该考虑的就是在应用程序中添加日志功能.我们会使用Windsor来配置,在这一部分,你将学习Windsor之外的其他功能. L ...
- (译)Windsor入门教程---第三部分 编写第一个Installer
原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...
- (译)Windsor入门教程---第四部分 整合
介绍: 目前为止,已经介绍了应用程序的各个部分.首先是添加了Windsor程序集,然后是添加了控制器工厂,还添加了installer类来注册控制器.虽然但是我们还没用在应用程序中调用他们.在这 ...
- ReactiveCocoa入门教程——第二部分(转)
ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...
- ReactiveCocoa入门教程——第二部分【转载】
ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...
- CI(CodeIgniter)框架入门教程——第二课 初始MVC
本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...
随机推荐
- asp:Property解释与例子
=======================================================================Property Get 语句在 Class 块中,声明构 ...
- auto ash v1
startdate=$1enddate=$2#reporttype=$3#reportformat='text'oraclehome=`echo $ORACLE_HOME` dbid=`sqlplus ...
- Facade ——为子系统的一组接口提供一致界面
Façade模式提供了子系统一组接口的一致封装特性,如下图所示: 如图所示,OperationWrapper的实现依赖SubSystem1,2等的Operation操作.但用户调用OperationW ...
- 动画——animation部分
动画部分是HTML5的新增部分,其特性是可以不借助js代码就可以单单凭借着css部分完成部分动态效果.其效果华丽,强大,炫酷无比,只要你想得到的动态效果都可以通过css3来完成. <style& ...
- java 线程的中断
Example12_6.java public class Example12_6 { public static void main(String args[]) { ClassRoom room6 ...
- CodeForces 682C Alyona and the Tree(广搜 + 技巧)
方法:从根节点开始广搜,如果遇到了应该删除的点,就再广搜删掉它的子树并标记,然后统计一下被标记的个数就是答案,所谓技巧就是从根节点开始搜索的时候,如果遇到了某个节点的距离<0,就让它是0,0可以 ...
- Linux中防火墙centos
一般的防火墙用下面这些简单的配置都能达到目的 1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开 ...
- 一个appium 博客
http://www.cnblogs.com/tobecrazy/category/699177.html appium Java控制Appium server start/stop 摘要: 相信很多 ...
- Codeforces Round #363 (Div. 2)D. Fix a Tree(并查集)
D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- PopupWindow组件的使用问题
//如果默认屏幕的话,父view就写自己 popupWindow.showAtLocation(inflate, Gravity.BOTTOM, 0, 0); PopupWindow 顾名思义为弹出式 ...