アドインおよび拡張機能

アドインには、ホスト アプリケーションのための拡張機能またはサービスが用意されています。 開発者は、.NET Framework のプログラミング モデルを使用してアドインを開発し、ホスト アプリケーションでそれらをアクティブ化できます。 こうした機能は、このモデルで、ホストとアドインの間に通信パイプラインを構築することによって実現します。 このモデルは、System.AddInSystem.AddIn.HostingSystem.AddIn.PipelineSystem.AddIn.Contract の各名前空間の型を使用することによって実装されます。

この概要は、次のセクションで構成されています。

  • アドイン モデル

  • アドインとホストの違い

  • 関連トピック

  • 参照

メモメモ

CodePlex の「Managed Extensibility and Add-In Framework」サイトには、その他のサンプル コードや、アドイン パイプラインのビルドに使用するツールのカスタマー テクノロジ プレビューが掲載されています。

アドイン モデル

アドイン モデルは、アドイン パイプライン (通信パイプラインとも呼ばれます) を構成する一連のセグメントで構成されます。アドイン パイプラインにより、アドインとホストの間の全通信が行われます。 このパイプラインは、アドインとそのホスト間でデータを交換するセグメントの対称通信モデルです。 ホストとアドインの間にこのようなセグメントを開発することで、アドインのバージョン管理と分離をサポートするために必要な抽象化レイヤーが得られます。

次の図に、そのパイプラインを示します。

アドイン パイプライン

アドイン パイプライン モデル。

これらのセグメントのアセンブリが、必ずしも同じアプリケーション ドメインに含まれていなくてもかまいません。 専用の新規アプリケーション ドメイン、既存のアプリケーション ドメイン、さらにはホストのアプリケーション ドメインにも、アドインを読み込むことができます。 同じアプリケーション ドメインに複数のアドインを読み込むことができます。これにより、リソースとセキュリティ コンテキストを他のアドインと共有できます。

アドイン モデルでは、ホストとアドインの間に分離境界 (またはリモート境界) と呼ばれるオプションの境界がサポートされており、この使用をお勧めします。 この境界をアプリケーション ドメインやプロセス境界に設定できます。

パイプラインの中間にあるコントラクト セグメントは、ホストのアプリケーション ドメインとアドインのアプリケーション ドメインの両方に読み込まれます。 コントラクトにより、ホストとアドインで相互に型を交換するために使用される仮想メソッドが定義されます。

分離境界を通過して型を渡すには、型がコントラクトかシリアル化できる型である必要があります。 コントラクトやシリアル化できる型でない型は、パイプラインのアダプター セグメントでコントラクトに変換する必要があります。

パイプラインのビュー セグメントは、コントラクトの定義に従って、ホストとアドインに共有メソッドのビューを提供する抽象基本クラスまたはインターフェイスです。

パイプライン セグメントの開発の詳細については、「パイプラインの開発」を参照してください。

以降のセクションでは、アドイン モデルの機能について説明します。

独立バージョン管理

アドイン モデルを使用して、ホストとアドインを別々にバージョン管理できます。 つまり、アドイン モデルでは次のシナリオが有効です。

  • ホストが、以前のバージョンのホスト用にビルドされたアドインを使用できるようにするアダプターの作成。

  • ホストが、新しいバージョンのホスト用にビルドされたアドインを使用できるようにするアダプターの作成。

  • ホストが、異なるホスト用にビルドされたアドインを使用できるようにするアダプターの作成。

探索とアクティブ化

情報ストアに格納されている、アドインを表すコレクション内のトークンを使用して、アドインをアクティブにすることができます。 アドインは、アドインのホストのビューを定義する型によって検索されます。 アドインを定義する型によって、特定のアドインを検索することもできます。 情報ストアは、パイプライン ストアとアドイン ストアの 2 つのキャッシュ ファイルで構成されます。

情報ストアの更新とリビルドの詳細については、「アドイン探索」を参照してください。 アドインのアクティブ化の詳細については、「アドインのアクティブ化」および「方法 : さまざまな分離レベルとセキュリティ レベルのアドインをアクティブにする」を参照してください。

分離レベルと外部プロセス

アドイン モデルでは、アドインとホスト間、アドインと他のアドイン間について、複数の分離レベルがサポートされます。 分離レベルの低いものから順に、次のレベルがあります。

  • アドインが、ホストと同じアプリケーション ドメインで実行される。 この場合、さまざまなアプリケーション ドメインを使用することで得られる分離とアンロードの機能が使用できなくなるため、このレベルは推奨されません。

  • ホストで使用されるアプリケーション ドメインとは異なる 1 つのアプリケーション ドメインに、複数のアドインが読み込まれる。

  • それぞれのアドインが専用のアプリケーション ドメインに排他的に読み込まれる。 これが最も一般的な分離レベルです。

  • 外部プロセスの同じアプリケーション ドメインに複数のアドインが読み込まれる。

  • 外部プロセスの専用のアプリケーション ドメインに、それぞれのアドインが排他的に読み込まれる。 これが最も分離レベルの高いシナリオです。

外部プロセスの使用の詳細については、「方法 : さまざまな分離レベルとセキュリティ レベルのアドインをアクティブにする」を参照してください。

有効期間管理

アドイン モデルはアプリケーション ドメインとプロセス境界を横断するため、オブジェクトの解放と再要求を行うにはガベージ コレクションだけでは不十分です。 アドイン モデルには、トークンと参照カウントを使用した有効期間管理機能があるため、通常は追加のプログラミングは必要ありません。 詳細については、「有効期間管理」を参照してください。

ページのトップへ

アドインとホストの違い

アドインとホストの違いは、アドインをアクティブにするものがホストであるということのみです。 ホストは、2 つのうち大きな方であることもあれば (ワード プロセッシング アプリケーションとスペル チェック機能の場合など)、小さな方であることもあります (メディア プレーヤーを埋め込んだインスタント メッセージング クライアントの場合など)。 アドイン モデルでは、クライアントとサーバーの両方のシナリオでアドインがサポートされます。 サーバー アドインの例としては、電子メール サーバーにウイルス検索、スパム フィルター、IP 保護を適用するアドインなどがあります。 クライアント アドインの例としては、ワード プロセッサ向けの参照アドイン、グラフィック プログラムやゲームなどの特殊機能、ローカルの電子メール クライアント用のウイルス検索機能などがあります。

ページのトップへ

関連トピック

タイトル

説明

パイプラインの開発

ホスト アプリケーションからアドインへのセグメントの通信パイプラインについて説明します。 チュートリアルのトピックでは、コード例を示して、パイプラインの構築方法と、Visual Studio のパイプラインへのセグメントの配置方法について説明しています。

アドイン探索

ホスト アプリケーションによってアドインを検出する方法について説明します。

アドインのアクティブ化

アドインのアクティブ化および非アクティブ化の方法について説明します。

アドインのパフォーマンス

ドメイン中立のアセンブリ読み込みとネイティブ イメージを使用してアドインのパフォーマンスを向上する方法について説明します。

方法 : さまざまな分離レベルとセキュリティ レベルのアドインをアクティブにする

さまざまなアプリケーション ドメイン、プロセス、セキュリティ レベルのシナリオでアドインをアクティブ化する方法について説明します。

方法 : 修飾データを使用する

アドインおよびパイプライン セグメントにカスタム データ属性を適用して、それらにアクセスする方法について説明します。

アドイン開発者の作業

アドイン パイプラインの必須セグメントを使用するためのアドインの開発方法について説明します。

アプリケーション ドメインとアセンブリ

セキュリティ、信頼性、バージョン管理、およびアセンブリのための分離の境界を提供するアプリケーション ドメイン間の関係について説明します。

ページのトップへ

参照

System.AddIn

System.AddIn.Contract

System.AddIn.Hosting

System.AddIn.Pipeline

ページのトップへ