Compartilhar via


Gerenciamento de tempo de vida

Comunicação remota recursos suplemento do modelo de complicam o gerenciamento da tempo de vida.Pois lixo coleção não adequadamente dá suporte a recuperação de objetos em vários domínios do aplicativo, o modelo de suplemento fornece seu próprio sistema de gerenciamento de tempo de vida.Este sistema de gerenciamento usa um sistema de contagem de referência e serviços de comunicação remota do common linguagem tempo de execução.

Sistema de gerenciamento de tempo de vida suplemento do modelo de pode se estender por vários domínios de aplicativos e processos isolados para certificar-se de que objetos, contratos e suplementos sejam descartados e seus domínios de aplicativo são descarregados.O sistema faz isso mantendo um identificador de token (ContractHandle) para o suplemento durante o time em que o add-in de serviços uma telefonar do host.

Implementação do gerenciamento de tempo de vida

Para implementar o gerenciamento da vida útil, você deve adquirir um token de vida útil sempre que um contrato é usado em um adaptador de contrato para exibição e revogar o token de tempo de vida, em seguida, quando o adaptador for concluído com ela.The ContractHandle classe faz esse trabalho para você, se você usá-lo em seus adaptadores. Se o pipeline passa tipos personalizados, você deve adquirir o identificador de token em todas as classes de adaptador de contrato para exibição que você implementar.Para obter mais informações sobre adaptadores de contrato para exibição, consulte Contratos, exibições e adaptadores.

The ContractHandle classe aceita o contrato sistema autônomo seu construtor. O exemplo a seguir mostra como conjunto o identificador de token de tempo de vida em um adaptador do host.

Observação importante:

O ContractHandle é fundamental para o gerenciamento da tempo de vida. Se você não conseguir manter uma referência à ContractHandle o objeto, coleta de lixo será solicitá-lo e a tubulação será desligado quando seu programa não espera. Isso pode levar a erros que são difíceis de diagnosticar como sistema autônomo AppDomainUnloadedException. desligado é um preparar da tempo de vida de um pipeline normal, portanto, não é possível para o código de gerenciamento de tempo de vida detectar essa condição é um erro.

Private _contract As ICalc2Contract
Private _handle As ContractHandle

Public Sub New(ByVal contract As ICalc2Contract)
    _contract = contract
    _handle = New ContractHandle(contract)
End Sub
private CalculatorContracts.ICalc2Contract _contract;

private System.AddIn.Pipeline.ContractHandle _handle;

public CalculatorContractToViewHostAdapter(ICalc2Contract contract) {
    _contract = contract;
    _handle = new System.AddIn.Pipeline.ContractHandle(contract);
}

Depois que você adquire o identificador de token, o sistema se encarrega de todas as funções de gerenciamento de tempo de vida e requer sem programação adicional.

No modelo de suplemento, o host e suplementos operam sistema autônomo se seus próprios gerenciamento da tempo de vida foi controlado pelo coletor de lixo.Obtém descartadas suas referências de locais e que faz com que todas as referências remotas a ser descartado e coletados.

Suplemento de desligado

O aplicativo host pode desligar domínio do aplicativo de um suplemento, chamando o Shutdown método para o AddInController classe.

The AddInController classe mantém registro de suplementos e seus domínios de aplicativo para certificar-se de que eles estejam descarregados.

Consulte também

Conceitos

Contratos, exibições e adaptadores

Desenvolvimento de pipeline

Date

History

Motivo

Julho de 2008

Adicionar uma observação sobre como manter uma referência ao contrato.

Comentários do cliente.