(译)Windsor入门教程---第三部分 编写第一个Installer
简介
在第二部分我们创建了控制器工厂。现在我们要把我们的控制器交给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的更多相关文章
- C语言编程入门之--第三章编写第一个C语言程序
第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...
- 超简单!pytorch入门教程(三):构造一个小型CNN
torch.nn只接受mini-batch的输入,也就是说我们输入的时候是必须是好几张图片同时输入. 例如:nn. Conv2d 允许输入4维的Tensor:n个样本 x n个色彩频道 x 高度 x ...
- WCF入门教程(三)定义服务协定--属性标签
WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- SQLite 入门教程(三)好多约束 Constraints(转)
转于: SQLite 入门教程(三)好多约束 Constraints 一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应 ...
- 【知识整理】这可能是最好的RxJava 2.x 入门教程(三)
这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最好的RxJava 2.x 入门教程(二) GitHub 代码同步更新:ht ...
- Photoshop入门教程(三):图层
学习心得:图层可以说是Photoshop的核心,看似简单,但是对于图像的各种编辑都是基于图层.他就像一层透明的.没有厚度的玻璃纸,每张玻璃纸设置不同的效果,层层叠加,最后显现出绚烂的效果. 在进行图像 ...
- Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导
Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导 Veins(车载通信仿真框架)入门教程(三)——多跳路由实现指导 必要的message类实现 从下面开始是在veins/src/vei ...
- .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...
随机推荐
- MVC动态生成表单
1*书写方式 一.using语句可以不写结束标记,自动加上 服务端 客户端 默认提交当前控制器和操作方法 二.开始与结束代码都写 服务端 客户端 三.一些常用的重载方法 (1)要提交的控制器,和操作方 ...
- __declspec(dllexport) 和 __declspec(dllimport)的作用
operatordll.h #include <iostream> #ifndef _WIN32 #define DLL_EXPORT#else #ifdef OPERATORDLL_EX ...
- MyEclipse 2015 运行tomcat 内存溢出的解决方法
内存溢出错误: 2016-3-16 11:19:55 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() ...
- iOS真机测试中出现dyld`dyld_fatal_error错误
最近进入一家新公司,接手了一个之前由外包公司承接的项目.首先吐槽一下项目质量,哎毕竟也憋了很久了. 1.上手项目是打不开的,所有framework静态库全体飘红,一编译七八十错误.最终是偷懒还是什么就 ...
- docker的一些常用命令整理
docker清除命令: 杀掉所有容器:docker kill $(docker ps -q) ; 清除所有容器:docker rm $(docker ps -a -q) ; 清除所有镜像:docker ...
- java设计模式案例详解:代理模式
代理模式就是用一个第三者的身份去完成工作,其实际意义跟字面意思其实是一样的,理解方式有很多,还是例子直观. 本例的实现类是实现买票功能,实际应用想要添加身份验证功能,利用代理模式添加验证步骤.上例子: ...
- 快学Scala-第六章 对象
知识点: 1.单例对象 使用object语法结构达到静态方法和静态字段的目的,如下例,对象定义某个类的单个实例,包含想要的特性,对象的构造器在该对象第一次被使用时调用. object Account{ ...
- C# 初步学习
这学期有了C#开发这门课....先做了计算器,还有进制转换,别人看来似乎很强,其实在ACM中算是两个简单的水题了.....参加竞赛一年下来,发现学到的算法和数据结构都是十分有用的东西. 计算器最核心的 ...
- java导读
导读: 我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构:第二,J2ME,面向无限领域,很有潜力的家伙,看看中国的手机用户就知道了.第三,面向企业应用.计算的平台,J2EE. ...
- sqlserver2008用bat脚本备份时报错因为库名有中横杠【原创】
提示原因是数据库名字有中横岗“-” 解决方法:用中括号把名字括起来就可以了 call :backupone [数据库名-new] 完整备份脚本如下 @ECHO ON set DATE=%date:/= ...