Administración de la duración

Las funciones de comunicación remota del modelo del complemento complican la administración de la duración. Dado que la recolección de elementos no utilizados no puede reclamar objetos correctamente en diversos dominios de aplicación, el modelo del complemento proporciona su propio sistema de administración de la duración. Este sistema de administración utiliza un sistema de recuento de referencias y los servicios de comunicación remota de Common Language Runtime.

El sistema de administración de la duración del modelo del complemento abarca varios dominios de aplicación y procesos aislados para asegurarse de que se eliminan los objetos, contratos y complementos y que sus dominios de aplicación se descargan. Para realizar esta operación, el sistema mantiene un identificador del token (ContractHandle) en el complemento durante el período de tiempo que el complemento realiza una llamada desde el host.

Implementación de la administración de la duración

Para implementar la administración de la duración, debe adquirir un token de duración siempre que se utilice un contrato en un adaptador de contrato a vista; a continuación, deberá revocar el token de duración cuando el adaptador termine de operar con él. La clase ContractHandle realiza esta tarea por usted si la utiliza en sus adaptadores. Si la canalización admite tipos personalizados, debe adquirir el identificador del token en todas las clases de adaptadores de contrato a vista que implemente. Para obtener más información sobre los adaptadores contrato a vista, vea Contratos, vistas y adaptadores.

La clase ContractHandle toma el contrato como su constructor. En el ejemplo siguiente se muestra cómo se establece el identificador del token de duración en un adaptador del host.

Nota importanteImportante

El objeto ContractHandle resulta crítico para la administración de la duración.Si no puede mantener una referencia al objeto ContractHandle, la recolección de elementos no utilizados lo reclamará y la canalización se cerrará cuando el programa no se lo espere.Esto puede dar lugar a errores difíciles de diagnosticar, como AppDomainUnloadedException.El cierre es una etapa normal del proceso de canalización, por lo que no hay ninguna forma de que el código de administración de la duración detecte que esta condición es un error.

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);
}

Cuando adquiere el identificador del token, el sistema se hace cargo de todas las funciones de administración de la duración y no requiere programación adicional.

Bajo el modelo del complemento, el host y los complementos funcionan como si su propia administración de la duración estuviera controlada por el recolector de elementos no utilizados. Sus referencias locales se eliminan, lo que hace que todas las referencias remotas se eliminen y se recolecten.

Cerrar complementos

La aplicación host puede cerrar un dominio de aplicación del complemento llamando al método Shutdown de la clase AddInController.

La clase AddInController hace un seguimiento de los complementos y sus dominios de aplicación para asegurarse de que se descargan.

Vea también

Conceptos

Contratos, vistas y adaptadores

Desarrollo de canalizaciones