Em C#, como uma classe pode fazer sua própria finalização de extremidade de aplicativos de uma maneira que funcione nos aplicativos ASP.NET e não-WEB?

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

Pergunta

Eu tenho uma aula de biblioteca usada em aplicativos ASP.NET e não-WEB que precisam de finalização de fim de aplicação.

Na biblioteca do meu projeto, quero que a classe faça sua própria finalização de fim de aplicação sem exigir que um desenvolvedor adicione uma chamada ao global.Application_END ou AppDomain.CurrentDomain.processexit.

Como isso pode ser feito?

Antecedentes adicionais/racionalidade:

Mesmo se eu considerasse essas opções, parece que o appDomain.CurrentDomain.processexit não é chamado quando um aplicativo ASP .NET é interrompido no IIS. E global.application_end é específico para asp .net. Portanto, nenhuma opção é compatível com ambas as situações.

Se ajudar a ter um exemplo específico de por que isso pode ser necessário ... nesse caso em particular, ele usa o sqldependência que (como eu o entendo) requer uma chamada para sqldependency.start para inicialização e uma chamada para sqldependency.stop antes de aplicação terminação.

(Vejo http://msdn.microsoft.com/en-us/library/ms172133.aspx)

Foi útil?

Solução

Parece que um fianalizador estático simulado descrito nesta resposta, então, https://stackoverflow.com/a/256278/449837, funciona em aplicativos da Web e não da Web.

Aqui está uma amostra que estou trabalhando:

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
}

(Nota: Para alguns ambientes de código de código, como Linqpad, ~ Finalizador pode não disparar até que o próprio aplicativo ScratchPad feche)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top