当我们在进行开发的时候,通过VS默认创建的Controller类型实际上继承自抽象类Controller。该类型中定义了很多的辅助方法和属性以编程变得简单。如下面的代码片断所示,除了直接继承ControllerBase之外,Controller类型还显式实现了IController和IAsyncController接口,以及代表ASP.NET MVC 四大筛选器(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter)的4个接口。
- public abstract class Controller :
- ControllerBase,
- IController,
- IAsyncController,
- IActionFilter,
- IAuthorizationFilter,
- IExceptionFilter,
- IResultFilter,
- IDisposable,
- ...
- {
- //省略成员
- }
二、 ControllerFactory
ASP.NET MVC为Controller的激活定义相应的相应的工厂,我们将其统称为ControllerFactory,所有的ControllerFactory实现了接口IControllerFactory接口。如下面的代码片断所示,Controller对象的激活最终最终通过IControllerFactory的CreateController方法来完成,该方法的两个参数分别表示当前请求上下文和从路由信息中获取的Controller的名称(最初来源于请求地址)。
- public interface IControllerFactory
- {
- IController CreateController(RequestContext requestContext, string controllerName);
- SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName);
- void ReleaseController(IController controller);
- }
- public enum SessionStateBehavior
- Default,
- Required,
- ReadOnly,
- Disabled
- }
处理负责创建Controller处理请求之前,ControllerFactory还需要在完成请求处理之后实施对Controller的释放回收,后者实现在ReleaseController方法中。IControllerFactory的另一个方法GetControllerSessionBehavior方法返回一个SessionStateBehavior枚举。熟悉ASP.NET的读者应该对SessionStateBehavior不会感到陌生,它用于表示请求处理过程中会话状态支持的模式,它的四个枚举值分别具有如下的含义: