![](/img/trans.png)
[英]How do I make a class library that works in ASP.NET and non-ASP.NET applications?
[英]In C#, how can a class do its own application-end finalization in a way that works under both ASP.Net and non-web applications?
我有一個在ASP.Net和非Web應用程序中使用的庫類,它們需要對應用程序結束進行終結處理。
在我的項目的庫中,我希望類進行自己的應用程序終結處理,而無需開發人員添加對Global.Application_End或AppDomain.CurrentDomain.ProcessExit的調用。
如何才能做到這一點?
其他背景/理由:
即使我考慮這些選項,當ASP .Net應用程序在IIS中停止時,AppDomain.CurrentDomain.ProcessExit似乎也沒有被調用。 並且Global.Application_End特定於ASP .Net。 因此,這兩種選擇都不兼容。
如果有一個為什么可能需要這樣做的特定示例有幫助...在這種特殊情況下,它使用SqlDependency,據我所知,它需要調用SqlDependency.Start進行初始化,並需要在應用之前調用SqlDependency.Stop。終止。
看來,此SO答案https://stackoverflow.com/a/256278/449837中描述的模擬靜態fianalizer在Web和非Web應用程序中均可使用。
這是我正在工作的示例:
public class ClassThatNeedsStaticFinalizer {
// ... other class properties, methods, etc ...
#region Static Finalizer Emulation
static readonly Finalizer finalizer = new Finalizer();
private sealed class Finalizer
{
~Finalizer()
{
// ... Do final stuff here ...
}
}
#endregion
}
(注意:對於某些代碼便簽本環境,例如LinqPad,在便簽本應用程序本身關閉之前,〜Finalizer可能不會觸發)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.