您可以創建自己的ControllerFactory和DummyTempDataProvider。事情是這樣的:
public class NoSessionControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
var controller = base.GetControllerInstance(controllerType);
((Controller) controller).TempDataProvider = new DummyTempDataProvider();
return controller;
}
}
public class DummyTempDataProvider : ITempDataProvider
{
public IDictionary<string, object> LoadTempData(ControllerContext controllerContext)
{
return new Dictionary<string, object>();
}
public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
{
}
}
然後你只需要註冊應用程序啓動時的控制器工廠 - 例如你可以在Global.asax中做到這一點:
ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());
不錯的主意 - 我很想聽聽你是否遇到過任何其他問題,以及你最終能夠獲得多少輕量級。 – 2009-08-28 12:00:29
在實施Steve的變更後,我沒有做更多的實驗,但仍有相當多的開銷。我已經能夠最快地獲得ASP.NET的最快版本是使用直接的IHttpHandler實現。查看我的答案在這裏獲取更多信息:http://stackoverflow.com/questions/509978/something-faster-than-httphandlers/510001#510001 – 2009-08-28 15:01:15
這是固定在MVC 2中。我們修復了它贏得的會話狀態臨時數據提供者除非實際嘗試讀取/寫入臨時數據,否則不會拋出。 – 2009-08-28 16:40:43