能量的释放与利用知识框架 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[1]
ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[1]
Controller的释放和会话状态行为的控制
作为激活Controller对象的ControllerFactory不仅仅用于创建目标Controller对象 还具有两个额外的功能 即通过ReleaseController方法对激活的Controller对象进行释放和回收 以及通过调用GetControllerSessionBehavior方法返回用于控制当前会话状态行为的SessionStateBehavior枚举对象
对于默认使用的DefaultControllerFactory来说 它对Controller对象的释放操作很简单 即如果Controller类型实现了IDisposable接口 则直接调用其Dispose方法即可 我们将这个逻辑也实现在了我们自定义的ReflectedControllerFactory中
public class ReflectedControllerFactory : IControllerFactory
{
//其他操作
public void ReleaseController(IController controller)
{
IDisposable disposable = controller as IDisposable;
![能量的释放与利用知识框架 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[1]](http://img.zhputi.com/uploads/d44a/d44a1da8a38ed3a42a5a4545d9a17ce449779.jpg)
if (null != disposable)
{
disposable Dispose()
}
}
}
至于用于返回SessionStateBehavior枚举的GetControllerSessionBehavior方法 在默认的情况下它的返回值为SessionStateBehavior Default 通过前面的介绍我们知道在这种情况下具体的会话状态行为取决于创建的HttpHandler所实现的标记接口 对于ASP NET MVC应用来说 默认使用的HttpHandler是一个MvcHandler的对象 如下面的代码片段所示 它实现了IRequiresSessionState接口 意味着默认情况下会话状态是可读写的(相当于SessionStateBehavior Requried)
public class MvcHandler :
IHttpAsyncHandler
IHttpHandler
IRequiresSessionState
{
//其他成员
}
可以通过在Controller类型上应用System Web Mvc SessionStateAttribute特性来具体控制会话状态行为 如下面的代码片段所示 SessionStateAttribute具有一个SessionStateBehavior类型的只读属性Behavior用于返回具体行为设置的会话状态行为选项 该属性是在构造函数中被初始化的
lishixinzhi/Article/program/net/201311/16079