في C#، كيف يمكن لفصل أن يقوم بإنهاء نهاية التطبيق الخاصة به بطريقة تعمل في ظل كل من تطبيقات ASP.NET وغير وايب؟

StackOverflow https://stackoverflow.com/questions/19847181

سؤال

لدي فئة مكتبة تستخدم في تطبيقات ASP.NET وغير واشفة الإنترنت التي تحتاج إلى الانتهاء من نهاية التطبيق.

ضمن مكتبة مشروعي ، أريد أن يقوم الفصل بإنهاء نهاية التطبيق الخاص به دون مطالبة المطور بإضافة مكالمة إلى global.application_end أو appdomain.currentdomain.processexit.

كيف يمكن القيام بذلك؟

خلفية إضافية/مبررات:

حتى لو كنت أفكر في هذه الخيارات ، يبدو أن AppDomain.CurrentDomain.ProcessExit لا يتم استدعاؤه عند إيقاف تطبيق ASP .NET في IIS. و Global.Application_end خاص بـ ASP .NET. لذلك ، لا يتوافق الخيار مع كلتا الحالتين.

إذا كان من المفيد أن يكون لديك مثال محدد على سبب الحاجة إلى ذلك ... في هذه الحالة بالذات ، فإنه يستخدم SQLDependency والذي يتطلب (كما أفهمه) دعوة إلى sqldependency نهاية.

(نرى http://msdn.microsoft.com/en-us/library/ms172133.aspx)

هل كانت مفيدة؟

المحلول

يبدو أن مركبة ثابتة محاكاة موصوفة في هذا الإجابة ، https://stackoverflow.com/a/256278/449837, ، يعمل في كل من تطبيقات الويب وغير وايب.

إليك عينة أعمل فيها:

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
}

(ملاحظة: بالنسبة لبعض بيئات Scratchpad Code مثل LinqPad ، قد لا يطلق ~ Finalizer حتى يغلق تطبيق ScratchPad نفسه)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top