(译)Windsor入门教程---第二部分 引用Windsor

介绍


在第一部分我们创建了一个mvc应用程序,并且已经添加了Windsor,但是还没有使用它。为了使用Windsor我们需要在应用程序中添加引用。首先我们来看的是控制器工厂,我们将用它来管理我们的控制器和所有其他的依赖项。

控制器工厂

和其他框架不同,IoC容器就像是一个网络管理员。如果它不出错(前提是你正确的使用),你都不会注意到它。换句话说,我们不会直接的去调用容器也不会和它的API交互,就像你平时根本没注意到你使用了日志处理框架、表现层框架(例如:ASP.NET
MVC)或者是持久性框架(例如:NHibernate)。

控制器工厂是处理任何与容器显式交互的地方(除了我们会在Global.asax文件中引导容器)。这的确人很多人感到惊讶并难以致信,如果你也不信,那么请相信我的话的,你会看到它是如何工作,如何利用控制反转(模式)来让这一切成为可能!

控制器工厂是一个底层类,甚至你从来没有在你的代码里调用过。为了显示的调用,我在解决方案里添加了
Plumbing
文件夹,并且在此文件夹里添加了一个WindsorControllerFactory.cs类,这个类继承了MVC的默认控制器工厂类DefaultControllerFactory,并且重写了它的两个方法:

 1 using Castle.MicroKernel;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Web;
6 using System.Web.Mvc;
7 using System.Web.Routing;
8
9 namespace WindsorTutorial.Plumbing
10 {
11 public class WindsorControllerFactory : DefaultControllerFactory
12 {
13 private readonly IKernel kernel;
14 public WindsorControllerFactory(IKernel kernel)
15 {
16 this.kernel = kernel;
17 }
18 public override void ReleaseController(IController controller)
19 {
20 kernel.ReleaseComponent(controller);
21 }
22 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
23 {
24 if (controllerType == null)
25 {
26 throw new HttpException(404, string.Format("The controller for path ‘{0}‘ could not be found.", requestContext.HttpContext.Request.Path));
27 }
28 return (IController)kernel.Resolve(controllerType);
29 }
30 }
31 }

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。

时间: 2024-10-04 02:55:47

(译)Windsor入门教程---第二部分 引用Windsor的相关文章

Windsor入门教程---第一部分 获取Windsor

介绍 从开发环境的角度看,Windsor只是一个类库.不需要安装,也不需要额外的工具,你直需要获取Windsor的类库到你的电脑上就可以了. 获取 有几个方法可以获取到Windsor,可以使用包管理工具OpenWrap,也可以使用微软的NuGet,或者也可以手动下载Windsor.最简单的方法就是使用Nuget,我们接下来就是使用NoGet. 新建解方案 启动Visual Studio 新建项目---ASP.NET MVC 3 Web Application 选择Internet 和 Razor

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

介绍 现在我们已经有了基础的框架了,是时候添加内容了,那么我们首先应该考虑的就是在应用程序中添加日志功能.我们会使用Windsor来配置,在这一部分,你将学习Windsor之外的其他功能. Logging Facility 在上一部分说过,Windsor有很多自带的可选的功能组件,他们扩展了Windsor的即用性.在这一部分,我们将在程序中添加日志功能. Logging Facility提供了一些常用的日志框架比如Log4net.Nlog,以及mvc内置的日志框架Trace.Logging Fa

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

简介 在第二部分我们创建了控制器工厂.现在我们要把我们的控制器交给Windsor来管理. Installer Windsor有一个专门的类installer.cs,用来向容器注册组件.在你的应用程序中至少会有几个这样的installer类,所以要保持他们的代码整洁以及可见性.接下来在我们的应用程序中新建一个专门的文件夹"Installer"来存放这些类.我们首先要注册到容器中的就是控制器,所以我们先来新建一个ControllersInstaller.cs类. Controller in

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

ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使用函数响应式(FRP)技术.加上第一部分的讲解,你将会学会如何使用信号量(对事件发出数据流)如何替代标准的动作和事件处理逻辑.你也会学到如何转换.分离和组合这些信号量. 在这里,也就是第二部分里,你将会学到更多先进的ReactiveCocoa特性,包括: 1.另外两个事件类型:error和completed 2.Throttling(节流) 3.Threading 4.Continuations 5.更多... 是时候开始了.

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

介绍: 目前为止,已经介绍了应用程序的各个部分.首先是添加了Windsor程序集,然后是添加了控制器工厂,还添加了installer类来注册控制器.虽然但是我们还没用在应用程序中调用他们.在这一部分,我们会实现它. 引导: 我们还没有做的是,就是在我们的应用程序中创建一个实际的容器(唯一),安装我们的installer,告诉mvc框架使用我们自己的控制器工厂来代替框架默认的,这些功能都在global.asax文件中. 我们实例化了Windsor的核心类WindsorContainer,紧接着调用

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

ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换.分割和聚合这些信号. 在本系列教程的第二部分,你将会学到一些ReactiveCocoa的高级功能,包括: 另外两个事件类型:error 和 completed 节流 线程 延伸 其他 是时候深入研究一下了. Twitter Instant 在本教程中你将要开发的应用叫Twitter Instant

ReactiveCocoa入门教程——第二部分

ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换.分割和聚合这些信号. 在本系列教程的第二部分,你将会学到一些ReactiveCocoa的高级功能,包括: 另外两个事件类型:error 和 completed 节流 线程 延伸 其他 是时候深入研究一下了. Twitter Instant 在本教程中你将要开发的应用叫Twitter Instant

[译]zookpeer 入门教程

入门:分布式应用程序协调服务 ZooKeeper 本文档包含的信息来帮助你的ZooKeeper快速入门.它是在开发人员希望能够尝试一下主要目的,并包含安装简单说明一个ZooKeeper的服 务器,几个命令,以验证它是否正在运行,一个简单的编程示例.最后,为了方便,还有更多的关于安装复杂,几节,例如运行复制的部署和优化事务日志.然而, 对于商业部署的完整说明,请参阅的ZooKeeper管理员指南. 先决条件 见管理员指南中的系统要求. 下载 从Apache下载镜像下载最近的稳定版本 ,从而得到 Z

Storm入门教程 第二章 构建Topology[转]

2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Workers Configuration Storm集群和Hadoop集群表面上看很类似.但是Hadoop上运行的是MapReduce jobs,而在Storm上运行的是拓扑(topology),这两者之间是非常不一样的.一个关键的区别是: 一个MapReduce job最终会结束,