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用於返回具體行為設置的會話狀態行為選項該屬性是在構造函數中被初始化的
[] []
From:http://tw.wingwit.com/Article/program/net/201311/16079.html