Detección de complementos
Las aplicaciones host pueden detectar los complementos que están disponibles. La detección se compone de dos tareas:
Registrar la información sobre todos los complementos y los segmentos de canalización en archivos de la memoria caché.
Buscar los complementos para una determinada vista de host del complemento en la memoria caché.
En función de la aplicación, el host normalmente detecta los complementos al inicio, cuando se carga un documento o tras una solicitud del usuario. La clase AddInStore proporciona los métodos que realizan estas tareas.
Una vez que se han detectado los complementos, puede activarlos tal y como se describe en Activación de complementos y Cómo: Activar complementos con niveles de seguridad y aislamiento diferentes.
Registrar complementos y segmentos de canalización
Para realizar el registro, debe determinarse primero qué complementos son válidos; para ello, se comprueban los atributos de los segmentos de canalización y se genera información sobre sus canalizaciones. Para obtener más información acerca de cómo se aplican atributos a los segmentos de canalización y cómo se crea la estructura de directorios de canalizaciones, vea Requisitos del desarrollo de canalizaciones. La estructura de directorios de canalizaciones puede contener una o varias canalizaciones. Esta información se almacena en la memoria caché en dos archivos ubicados en el directorio raíz de la canalización: PipelineSegments.store y AddIns.store.
Los métodos que se utilizan para el registro toman una variable de cadena que representa la ruta de acceso raíz de la canalización o un valor de la enumeración PipelineStoreLocation. Estos métodos crean nuevos archivos de memoria caché si estos archivos no crearon previamente.
Los métodos compilan o actualizan los archivos de la memoria caché, tal y como se describe en la tabla siguiente.
Método de registro |
Descripción |
---|---|
Vuelve a compilar la memoria caché de segmentos de canalización e incluye los nuevos segmentos agregados. Este método también vuelve a compilar la memoria caché de complementos si los complementos están dentro de la estructura de directorios de canalizaciones. |
|
Vuelve a compilar la memoria caché de los complementos en una ubicación especificada. Llame a este método si los complementos están fuera de la estructura de directorios de canalizaciones. |
|
Actualiza los segmentos de canalización con los nuevos segmentos agregados. Este método también actualiza la memoria caché de complementos si los complementos están dentro de la estructura de directorios de canalizaciones. Si no hay nuevos complementos o segmentos de canalización, este método simplemente valida la memoria caché. |
|
Actualiza la memoria caché de complementos con nuevos complementos en una ubicación especificada. Llame a este método si los complementos están fuera de la estructura de directorios de canalizaciones. Si no hay ningún nuevo complemento instalado, este método simplemente valida la memoria caché. |
Las sobrecargas del método Update y Rebuild toman como parámetro el directorio raíz de la estructura de directorios de canalizaciones o un valor de la enumeración PipelineStoreLocation.
Estos métodos utilizan la carga de sólo reflexión para obtener información y no ejecutan el código del complemento ni del segmento de canalización. La información almacenada en memoria caché tiene marcas de tiempo para que no se procese de nuevo en las actualizaciones.
Almacenar archivos en la memoria caché
Al llamar a los métodos de registro, se obtiene como resultado dos archivos de memoria caché:
PipelineSegments.store
Este archivo se encuentra en el directorio raíz de la estructura de directorios de canalizaciones.
AddIns.store
Este archivo se encuentra en el directorio que contiene uno o varios subdirectorios de complementos. Este directorio puede estar incluido en la estructura de directorios de canalizaciones o encontrarse en otra ubicación.
Buscar complementos
El método FindAddIns examina los archivos de almacenamiento para buscar todos los complementos que coinciden con la vista de host especificada del complemento. La vista de host del complemento es la clase base abstracta o interfaz que describe los métodos que utiliza el host y el complemento, tal y como se especificó en el contrato. Para buscar los archivos de la memoria caché creados por los métodos de registro, este método toma como parámetro el directorio raíz de la estructura de directorios de canalizaciones o un valor de la enumeración PipelineStoreLocation.
Nota |
---|
Sólo debe llamar a FindAddIns después de asegurarse de que los archivos de almacenamiento se han compilado y actualizado de modo que pueden buscarse todos los complementos disponibles. |
El método FindAddIns devuelve una colección IList<T> de tokens que describe cada complemento disponible que tiene una canalización válida. La clase AddInToken describe cada uno de los token.
Cada token tiene la información siguiente sobre un complemento, que se obtiene del atributo AddInAttribute de la clase del complemento:
Nombre
Descripción
Editor
Versión
En la mayoría de los casos, hay un único token en la colección IList<T>. Si hay más de un token, la aplicación host puede utilizar esta información para ayudar al usuario a seleccionar el complemento que se va a activar. Para obtener más información sobre la activación, vea Activación de complementos.
Para buscar complementos fuera de la estructura de directorios de canalizaciones, debe incluir el parámetro AddInPaths. Dado que este parámetro es una matriz de cadenas, puede especificar varias ubicaciones.
También puede buscar un complemento específico con el método FindAddIn, que devuelve una colección de un solo token.
Ejemplo
En el ejemplo siguiente se muestra cómo se compilan los archivos de memoria caché y se buscan complementos.
' Get the path for the pipeline root.
' Assumes that the current directory is the
' pipline directory structure root directory.
Dim pipeRoot As String = Environment.CurrentDirectory
' Update the cache files of the
' pipeline segments and add-ins.
Dim warnings() As String = AddInStore.Update(pipeRoot)
For Each warning As String In warnings
Console.WriteLine(warning)
Next
' Search for add-ins of type Calculator (the host view of the add-in)
' specifying the host's application base, instead of a path,
' for the FindAddIns method.
Dim tokens As Collection(Of AddInToken) = _
AddInStore.FindAddIns(GetType(Calculator), PipelineStoreLocation.ApplicationBase)
// Get path for the pipeline root.
// Assumes that the current directory is the
// pipeline directory structure root directory.
String pipeRoot = Environment.CurrentDirectory;
// Update the cache files of the
// pipeline segments and add-ins.
string[] warnings = AddInStore.Update(pipeRoot);
foreach (string warning in warnings)
{
Console.WriteLine(warning);
}
// Search for add-ins of type Calculator (the host view of the add-in)
// specifying the host's application base, instead of a path,
// for the FindAddIns method.
Collection<AddInToken> tokens =
AddInStore.FindAddIns(typeof(Calculator),PipelineStoreLocation.ApplicationBase);