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;
if (null != disposable)
{
disposableDispose()
}
}
}
至于用于返回SessionStateBehavior枚举的GetControllerSessionBehavior方法在默认的情况下它的返回值为SessionStateBehaviorDefault通过前面的介绍我们知道在这种情况下具体的会话状态行为取决于创建的HttpHandler所实现的标记接口对于ASPNET MVC应用来说默认使用的HttpHandler是一个MvcHandler的对象如下面的代码片段所示它实现了IRequiresSessionState接口意味着默认情况下会话状态是可读写的(相当于SessionStateBehaviorRequried)
public class MvcHandler :
IHttpAsyncHandler
IHttpHandler
IRequiresSessionState
{
//其他成员
}
可以通过在Controller类型上应用SystemWebMvcSessionStateAttribute特性来具体控制会话状态行为如下面的代码片段所示SessionStateAttribute具有一个SessionStateBehavior类型的只读属性Behavior用于返回具体行为设置的会话状态行为选项该属性是在构造函数中被初始化的
[] []