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

简介

在第二部分我们创建了控制器工厂。现在我们要把我们的控制器交给Windsor来管理。

Installer

Windsor有一个专门的类installer.cs,用来向容器注册组件。在你的应用程序中至少会有几个这样的installer类,所以要保持他们的代码整洁以及可见性。接下来在我们的应用程序中新建一个专门的文件夹"Installer"来存放这些类。我们首先要注册到容器中的就是控制器,所以我们先来新建一个ControllersInstaller.cs类。

Controller installer

Installer类需要为Windsor解决两个问题:怎么在应用程序中找到控制器和怎么配置控制器。

第一点,怎样找到控制器?很简单,在ASP.NET MVC中,控制器都是要实现Icontroller接口的。

配置起来很简单,首先,mvc框架要求我们为每一次的请求都创建一个新的控制器实例。而Windsor默认是只有在第一次请求的时候创建实例的。相应的installer类:

这个类重写了IwindsorInstaller的Install方法,通过Windsor的Fluent Registration API注册了控制器。这是我们推荐使用的,也是最简洁、最灵活的方法。每当我们在应用程序中新增加Controller(大的应用里可能会有几百个)的时候,Windsor会自动注册它们,我们不需要手动做任何事情,我们只要遵循Windsor的约定即可。

继续看代码,静态类Classes是进行注册的入口点,首先调用public类型的非抽象方法FromThisAssembly(),这是一个包含注册器的组件(mvc的组件,存在于控制器的生命周期中)。但是我们并不需要注册所有的组件,所以BasedOn<IContorller>过滤器要求类必须实现Icontroller接口,虽然叫BasedOn,但是它同样的也是一个泛型接口。最后是非常重要的一点----instance lifestyle。mvc希望的是使用过后即销毁,但每次Windsor需要的时候要有一个新的实例,而且通知Windsor在什么时候不需要实例,可以回收实例了是调用者的职责所在(这也是为什么我们在WindsorControllerFactory类里重写了ReleaseController方法)。

现在我们已经在Windsor注册了控制器的工作机制,并且有了控制器工厂来将控制器管理从Windsor卸载。在第四部分,我们将把这些组装在一起运行----一个由Windsor支撑的应用。但是在此之前,有一点是必须关注的,那就是测试。

(译)Windsor入门教程---第三部分 编写第一个Installer的更多相关文章

  1. C语言编程入门之--第三章编写第一个C语言程序

    第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...

  2. 超简单!pytorch入门教程(三):构造一个小型CNN

    torch.nn只接受mini-batch的输入,也就是说我们输入的时候是必须是好几张图片同时输入. 例如:nn. Conv2d 允许输入4维的Tensor:n个样本 x n个色彩频道 x 高度 x ...

  3. WCF入门教程(三)定义服务协定--属性标签

    WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...

  4. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  5. SQLite 入门教程(三)好多约束 Constraints(转)

    转于: SQLite 入门教程(三)好多约束 Constraints 一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应 ...

  6. 【知识整理】这可能是最好的RxJava 2.x 入门教程(三)

    这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最好的RxJava 2.x 入门教程(二) GitHub 代码同步更新:ht ...

  7. Photoshop入门教程(三):图层

    学习心得:图层可以说是Photoshop的核心,看似简单,但是对于图像的各种编辑都是基于图层.他就像一层透明的.没有厚度的玻璃纸,每张玻璃纸设置不同的效果,层层叠加,最后显现出绚烂的效果. 在进行图像 ...

  8. Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导

    Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导 Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导 必要的message类实现 从下面开始是在veins/src/vei ...

  9. .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

    一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...

随机推荐

  1. window窗体程序意外崩溃,EventType clr20r3错误的解决方法

    EventType clr20r3, P1 ggreadcard.exe, P2 1.0.0.0, P3 51d3d283, P4 zljy.common, P5 1.0.0.0, P6 4fc6c2 ...

  2. web服务器小记

    服务器分web服务器,应用程序服务器以及HTTP服务器,此处只解释web服务器,详情: http://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575 ...

  3. 1.1 python 安装(Windows)

    1.浏览器输入URL http://www.python.org/download/ https://www.python.org/downloads/release/python-2712/ Win ...

  4. C#之控制台输入和输出

    控制台输出 C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务.Console.WriteLine("Hello World!"); 语 ...

  5. Springmvc默认首页的问题

    之前自己写的springmvc 默认首页都是偷懒方式: web.xml 中定义的默认首页: <welcome-file-list> <welcome-file>index.ht ...

  6. Spring Boot 系列教程9-swagger-前后端分离后的标准

    前后端分离的必要 现在的趋势发展,需要把前后端开发和部署做到真正的分离 做前端的谁也不想用Maven或者Gradle作为构建工具 做后端的谁也不想要用Grunt或者Gulp作为构建工具 前后端需要通过 ...

  7. C/C++ kubetu

    reference sign & use predefine in c, but const in c++

  8. Swift 学习笔记(四)

    116.使用可选链式调用代替强制展开 通过在想调用的属性.方法.或下标的可选值(optional value)后面放一个问号(?),可以定义一个可选链.这一点很像在可选值后面放一个叹号(!)来强制展开 ...

  9. [转]程序开发基础学习二(C++ Google Style 命名规则)

    无规矩不成方圆,新的岗位就需要服从团队的编码规则.很开心团队用的是Google的C++编码规则,大概看了下Google 的编码规则,正如九天翔雁说的:“Google的 C++ Style Guide远 ...

  10. LNMPA by lin

    CentOS系统下执行:wget -c http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz && tar zxf lnmp1.1-full.t ...