在ASP.net中的通用处理程序文件(.ashx) 默认情况下未启用会话,无论如何,会话集合都为空。
但是通过简单地实现“ISessionHandler”,会话可以通过会话集合突然访问..
我真的不明白,因为我的头部界面除了告诉其他东西需要有什么方法,属性等之外什么都不做。
有谁知道这是如何运作的?
提前致谢:)
答案 0 :(得分:5)
这些界面我相信叫做Marker Interfaces,它们是“Mark”的一个目的。通过反射(即检查类是否实现接口)或通过chken,如果类x是IInterface类型,您可以启用某些功能。
编辑:以下是关于这个主题的更多信息(关于Java,但相关)
答案 1 :(得分:3)
接口实际上没有实现任何东西;他们可能只是检查类型并根据它采取不同的行动。
例如:
public ISession Session
{
get { if (this is ISessionHandler) return theSession; else return null; }
}
答案 2 :(得分:1)
这些接口仅由HttpContext使用。如果您查看反射器中Handler属性,您将看到以下内容:
set
{
this._handler = value;
this.RequiresSessionState = false;
this.ReadOnlySessionState = false;
this.InAspCompatMode = false;
if (this._handler != null)
{
if (this._handler is IRequiresSessionState)
{
this.RequiresSessionState = true;
}
if (this._handler is IReadOnlySessionState)
{
this.ReadOnlySessionState = true;
}
Page page = this._handler as Page;
if ((page != null) && page.IsInAspCompatMode)
{
this.InAspCompatMode = true;
}
}
}
密钥位为:
if (this._handler is IReadOnlySessionState)
{
this.ReadOnlySessionState = true;
}
正如其他人所说,它们是HttpContext使用的标记接口,用于确定它应具备的功能。
IHttpHandler的ProcessRequest接受一个HttpContext,因此两者之间的关系。
答案 3 :(得分:0)
来自IRequiresSessionState界面的文档:
指定目标HTTP处理程序 需要读写访问权限 会话状态值。这是一个标记 界面,没有方法。
答案 4 :(得分:0)
有人说Marker接口已被弃用,而且应该使用Attributes,但我想知道为什么......使用Marker接口也更安全,更优雅的语义,并且肯定比搜索属性更高效。< / p>