Administración de la duración
Actualización: Julio de 2008
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 importante: |
---|
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
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Julio de 2008 |
Se agregó una nota acerca de la forma de mantener una referencia al contrato. |
Comentarios de los clientes. |