我正在HttpContext.Current.Items根据登录的用户设置租户。为此,我使用以下代码:
protected virtual void Application_BeginRequest()
{
HttpContext.Current.Items["_CurrentTenant"] = Tenant.GetCurrent();
}
protected virtual void Application_EndRequest()
{
var currentTenant = HttpContext.Current.Items["_CurrentTenant"] as Tenant;
if (currentTenant != null)
currentTenant.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
由于HttpContext.Current.Items唯一的生命存在于当前请求中,因此我希望在请求完成后将其销毁。而且,该CurrentTenant对象是完全托管的对象。
因此,需要放置在EndRequest吗?如果您不这样做会怎样?
那么是否需要在EndRequest中进行处理呢?
只有您知道,在请求结束时处理该对象是否是您想要的。确保不再使用时将其丢弃。如果这是在请求的末尾,那么这可能是一个好地方。
如果你不这样做会怎样?
该.Dispose()方法不会被调用。这对于您的特定班级意味着什么,只有您自己可以说。正常模式会调用.Dispose()终结器,但在此之前,可能需要一段时间。那段时间发生的事情完全取决于它IDisposible最初被标记的原因。也许文件没有关闭,连接可能保持打开状态,句柄可能不会返回......只有你才能知道它是否是你的类。