アドイン探索
ホスト アプリケーションは利用可能なアドインを探索できます。 探索は次の 2 つのタスクによって実行されます。
すべてのアドインおよびパイプライン セグメントに関する情報のキャッシュ ファイルへの登録。
キャッシュを検索することによる、アドインの指定されたホスト ビューのためのアドインの検出。
ホスト アプリケーションがアドインの探索を、スタートアップ時、文書のロード時、ユーザーの要求時のどのタイミングで実行するかは、アプリケーションによって決まります。 AddInStore クラスにはこれらのタスクを実行するためのメソッドが用意されています。
いったんアドインを検出すると、「アドインのアクティブ化」および「方法 : さまざまな分離レベルとセキュリティ レベルのアドインをアクティブにする」で説明されている方法でそれらをアクティブにすることができます。
アドインおよびパイプライン セグメントの登録
登録には、パイプライン セグメントの属性の確認と、それらのパイプラインに関する情報の構築による、有効なアドインの判別が関係します。 パイプライン セグメントへの属性の適用とパイプライン ディレクトリ構造の作成の詳細については、「パイプライン開発の必要条件」を参照してください。 パイプライン ディレクトリ構造には 1 つ以上のパイプラインを組み込むことが可能です。 この情報は、パイプラインのルート ディレクトリにある PipelineSegments.store と AddIns.store の 2 つのファイルにキャッシュされます。
登録に使用されるメソッドは、パイプライン ルート パスまたは PipelineStoreLocation 列挙体の値を表す文字列変数を受け取ります。 これらのメソッドは、これらのキャッシュ ファイルがまだ作成されていない場合、新しいキャッシュ ファイルを作成します。
以下の表が示すように、これらのメソッドはキャッシュ ファイルのリビルドか更新を行います。
登録メソッド |
説明 |
---|---|
パイプライン セグメント キャッシュをリビルドして、新しい追加データを組み込みます。 このメソッドは、アドインがパイプライン ディレクトリ構造内にある場合、アドイン キャッシュもリビルドします。 |
|
指定の位置にあるアドインのアドイン キャッシュをリビルドします。 アドインがパイプライン ディレクトリ構造の外にある場合、このメソッドを呼び出します。 |
|
パイプライン セグメント キャッシュを追加データで更新します。 このメソッドは、アドインがパイプライン ディレクトリ構造内にある場合、アドイン キャッシュも更新します。 新しいパイプライン セグメントまたはアドインがない場合、このメソッドはキャッシュの検証だけを行います。 |
|
指定の位置にある新しいアドインのアドイン キャッシュを更新します。 アドインがパイプライン ディレクトリ構造の外にある場合、このメソッドを呼び出します。 新しいアドインがない場合、このメソッドはキャッシュの検証だけを行います。 |
Rebuild および Update メソッドのオーバーロードでは、パイプライン ディレクトリ構造のルート ディレクトリか PipelineStoreLocation 列挙体からの値をパラメーターとして受け取ります。
これらのメソッドは、リフレクションのみのロードを使用して情報を取得し、アドインのコードまたはパイプライン セグメントのコードの実行は行いません。 キャッシュされた情報にはタイム スタンプが付けられて、更新の際に再度計算されないようにします。
キャッシュ ファイル
登録メソッドを呼び出すと、以下に示す 2 つのキャッシュ ファイルが作成されます。
PipelineSegments.store
このファイルはパイプライン ディレクトリ構造のルート ディレクトリに置かれます。
AddIns.store
このファイルは、1 つ以上のアドイン サブディレクトリを含んだディレクトリに置かれます。 このディレクトリはパイプライン ディレクトリ構造内の場合もあれば、それ以外の場所である場合もあります。
アドインの検出
FindAddIns メソッドは、ストア ファイルを検査して、指定したアドインのホスト ビューと一致するすべてのアドインを検出します。 アドインのホスト ビューは、コントラクトに指定されているように、ホストおよびアドインによって使用されるメソッドを記述する抽象基本クラスまたはインターフェイスです。 登録メソッドで作成されたキャッシュ ファイルを検出するために、このメソッドはパイプライン ディレクトリ構造のルート ディレクトリか、PipelineStoreLocation 列挙体からの値をパラメーターとして受け取ります。
メモ |
---|
FindAddIns の呼び出しは、ストア ファイルがビルドおよび更新され、利用可能なすべてのアドインが検出できるようになってから行ってください。 |
FindAddIns メソッドは、有効なパイプラインを持つ利用可能な各アドインを記述するトークンの IList<T> コレクションを戻します。 各トークンは、AddInToken クラスによって記述されます。
各トークンには、アドインに関する以下の情報が含まれています。この情報は、アドインのクラスの AddInAttribute 属性から取得されます。
名前
説明
[発行者]
バージョン
ほとんどの場合、IList<T> コレクション内のトークンは 1 つだけです。 複数のトークンがある場合、ホスト アプリケーションはこの情報を使用して、ユーザーがアクティブにするアドインを選択できるようにすることができます。 アクティブにする方法の詳細については、「アドインのアクティブ化」を参照してください。
パイプライン ディレクトリ構造の外のアドインを検出するには、AddInPaths パラメーターを組み込む必要があります。 このパラメーターは文字列配列なので、複数の場所を指定できます。
FindAddIn メソッドは 1 つのトークンのコレクションを戻すため、このメソッドを使用して特定のアドインを検出することもできます。
例
以下は、キャッシュ ファイルをビルドして、アドインを検出する方法を示す例です。
' 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);