[英]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.