为什么ASP.NET中有两个不兼容的会话状态types?
我在ASP.NET MVC中看到了使用会话数据的两种方法:
-
System.Web.SessionState.HttpSessionState
,可在HttpApplication
-
System.Web.HttpSessionStateBase
,在Controller
可用
存储在一个中的数据似乎在另一个中可用。
不幸的是,这两种types的唯一共同的祖先是System.Object
,这意味着我不能为抽象的任何一个创build可重用的实用程序代码。
为什么这样的API? 我错过了两者之间有一个重要的区别?
在ASP.NET MVC抽象了经典的HttpContext对象Request,Response,Session的介绍。 它们代表了抽象类,并暴露在MVC框架中,隐藏了底层的上下文,简化了unit testing,因为抽象类可以被嘲弄。
例如对于会话对象,你有HttpSessionStateBase
和它的实现HttpSessionStateWrapper
。
下面是一个如何在传统的ASP.NET会话和抽象之间进行转换的例子:
HttpSessionStateBase session = new HttpSessionStateWrapper(HttpContext.Current.Session);
因此,您所指的System.Web.SessionState.HttpSessionState
是自传统ASP.NET 1.0以来存在的基础会话对象。 在MVC中,这个对象被包装成一个HttpSessionStateWrapper
。 但是,由于ASP.NET MVC是一个ASP.NET应用程序,您仍然可以获得Global.asax,其中包含裸会话。