如果不处理HttpContext.Current.Items,会发生什么情况?

时间:2019-02-12 14:15:35

标签: c# asp.net

我正在使用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();
}

由于HttpContext.Current.Items仅存在于当前请求中,因此我希望在请求完成后将其销毁。另外,CurrentTenant对象是完全托管的对象。

因此,是否需要将其放置在EndRequest中?如果您不这样做会怎样?

1 个答案:

答案 0 :(得分:0)

  

因此,是否需要将其放置在EndRequest中?

只有您知道,在请求末尾放置对象是否是您想要的。确保不再使用它时将其丢弃。如果那是在请求的末尾,那可能是个好地方。

  

如果不这样做会发生什么?

不会调用.Dispose()方法。这对于您的特定班级意味着什么,您只能说。普通模式将在终结器中调用.Dispose(),但是直到那时,它可能需要一段时间。这段时间发生的事情完全取决于为什么首先将其标记为IDisposible。也许文件没有关闭,连接可能保持打开状态,句柄可能没有返回……只有您知道它是否属于您的课程。