В C#, как класс может сделать свою собственную завершение приложения, так и в соответствии с приложениями ASP.NET и без WEB?

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

Вопрос

У меня есть библиотечный класс, используемый в приложениях ASP.NET и не-WEB, которые требуют завершения окончания приложения.

В библиотеке моего проекта я хочу, чтобы класс выполнил свою собственную завершению в конце приложения, не требуя, чтобы разработчик добавил призыв к Global.application_end или Appdomain.currentdomain.processexit.

Как это может быть сделано?

Дополнительный фон/обоснование:

Даже если бы я рассмотрел эти варианты, кажется, что Appdomain.currentDomain.ProcessExit не вызывается, когда приложение ASP .NET останавливается в IIS. И global.application_end специфичен для ASP .NET. Таким образом, ни один из вариантов не совместим с обеими ситуациями.

Если он помогает иметь конкретный пример того, почему это может потребоваться ... в данном конкретном случае, он использует SQLdePendence, которая (насколько я понимаю) требует вызова SQLdePendency.start для инициализации и вызов SQLdePendency.stop перед приложением завершение.

(видеть http://msdn.microsoft.com/en-us/library/ms172133.aspx)

Это было полезно?

Решение

Похоже, что смоделированный статический фианализер, описанный в этом ответе, https://stackoverflow.com/a/256278/449837, работает как в веб-приложениях, так и в приложениях, не являющихся 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 не может стрелять, пока само приложение Scrackpad не закроется)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top