原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx

介绍

在第一部分我们创建了一个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的更多相关文章

  1. (译)Windsor入门教程---第一部分 获取Windsor

    原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...

  2. iOS开发 ReactiveCocoa入门教程 第二部分

    ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使用函数响应式(FRP)技术.加上第一部分的讲解,你将会学会如何使用信号量(对事件发出数据流)如何替代标准的动作和事件处理逻辑.你也会 ...

  3. ReactiveCocoa入门教程--第二部分

    翻译自:http://www.raywenderlich.com/62796/reactivecocoa-tutorial-pt2 ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使 ...

  4. (译)Windsor入门教程---第五部分 添加日志功能

    介绍     现在我们已经有了基础的框架了,是时候添加内容了,那么我们首先应该考虑的就是在应用程序中添加日志功能.我们会使用Windsor来配置,在这一部分,你将学习Windsor之外的其他功能. L ...

  5. (译)Windsor入门教程---第三部分 编写第一个Installer

    原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...

  6. (译)Windsor入门教程---第四部分 整合

    介绍:     目前为止,已经介绍了应用程序的各个部分.首先是添加了Windsor程序集,然后是添加了控制器工厂,还添加了installer类来注册控制器.虽然但是我们还没用在应用程序中调用他们.在这 ...

  7. ReactiveCocoa入门教程——第二部分(转)

    ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...

  8. ReactiveCocoa入门教程——第二部分【转载】

    ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...

  9. CI(CodeIgniter)框架入门教程——第二课 初始MVC

    本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...

随机推荐

  1. grub修复

    sudo mount /dev/sda1 /boot/efi sudo modprobe efivarfs sudo grub-install /dev/sda sudo update-grub su ...

  2. ASP:GB2312格式文本文件转换成UTF-8格式

    '-------------------------------------------------'函数名称:gb2utf_file'作用:利用AdoDb.Stream对象来把GB2312格式文本文 ...

  3. vim 设置默认显示行号

    vim 要默认打开的时候显示行号,这样就可以不用每次编辑的时候在手动在命令模式下:set number 来显示行号. 具体做法是: 创建一个 .vimrc的配置文件. 在启动vim时,当前用户根目录下 ...

  4. c语言库函数

    #include <stdio.h> #define LENGTH 100 main() { FILE *fd; char str[LENGTH]; fd = fopen("he ...

  5. EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............

    EL表达式处理字符串 是否 包含 某字符串 截取 拆分............... JSP页面页头添加<%@ taglib uri="/WEB-INF/taglib/c.tld&qu ...

  6. Office2003/2010等集成SP的简单方法

    Office2003集成SP的简单方法 需要准备的工具:Office 2003 光盘镜像.SP3更新包.Office 2003 序列号.UltraISO,7-zip或winrar,虚拟光驱 步骤一:提 ...

  7. Jenkins email-ext邮件通知模板

    http://blog.csdn.net/houyefeng/article/details/51344337 示例 以html格式发送送如下内容:邮件内容为项目名称.构建次数.触发原因.构建日志前1 ...

  8. POJ 3419 Difference Is Beautiful(RMQ+二分 或者 模拟)

    Difference Is Beautiful Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%lld & %l ...

  9. 学习笔记——Windows下cocos2d-x,eclipse中自编译

    cocos2d-x创建的安卓项目导入eclipse后. 在项目属性中配置Builders. 在eclipse编译还需要配置相应的变量,即后面提到的cygwin编译中要添加的变量. D:/cygdriv ...

  10. zepto.js 学习之(一)

    中文文档:http://mweb.baidu.com/zeptoapi/#attr