[英]Can session call dispose method on session ending time?
我想知道IDisposable对象是否会在会话结束时处置。
我知道,我可以自己处理Session结束事件。 但我想写一个IDisposable类。
例如,我有
public class MyObject : IDisposable
{
// some properties
public void Dispose()
{
// disposing
}
}
我需要在会话结束时间处理此对象:
protected void Session_End(object sender, EventArgs e)
{
if (Session["key"] != null)
((MyObject)Session["key"]).Dispose();
}
所以,我想在会话结束时间知道操作将自动执行或我需要如上所述编写。
Session_End不会自动处理IDisposable对象,因此您的Session_End解决方案是正确的。
然而:
因此,尝试找到一个不需要在Session中存储IDisposable对象的解决方案。
实现IDisposable
接口的类的实例只有在您调用Dispose
方法时才会被“处理”,无论是直接还是间接通过using
构造。 当对象超出范围时,它不会自动发生。
例如,这将是不好的做法;
public void SomeMethodCalledDuringSession()
{
var resourceHog = new ResourceHog(); // where ResourceHog : IDisposable
// Perform operations
}
无论您的ASP.NET会话结束如何,此对象永远不会在此处正确处理。 但是,你可以在完成后直接调用Dispose
,或者更好的想法是这样做;
public void SomeMethodCalledDuringSession()
{
using(var resourceHog = new ResourceHog()) // where ResourceHog : IDisposable
{
// Perform operations
}
}
这转换为try ... finally
模式,在finally
子句中调用Dispose
,确保它被调用(除了少数几种情况)。
编辑 :我也会读这个; http://nitoprograms.blogspot.co.uk/2009/08/how-to-implement-idisposable-and.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.