パイプラインの開発
アドイン パイプラインとは、ホスト アプリケーションとそのアドイン間で通信するために使用する必要があるパイプライン セグメントのパスです。
次の図に、通信パイプラインとそのセグメントを示します。
アドイン パイプライン
ホスト アプリケーションとアドインが、パイプラインの両端に位置します。 端から中央にかけての部分には、ホスト アプリケーションとアドインの両方で共有されるオブジェクト モデルのビューを定義する抽象基本クラスが、ホスト アプリケーションとアドインの両方に含まれます。 これらの型 (クラス) によって、アドイン ビュー パイプライン セグメントと、アドイン パイプライン セグメントのホスト ビューが構成されます。 多くの場合、アドイン ビュー パイプライン セグメントには複数の抽象クラスが含まれますが、アドインの継承元のクラスをアドイン基本クラスと呼びます。
アドイン側アダプター パイプライン セグメントとホスト側アダプター パイプライン セグメントにより、ビュー パイプライン セグメントとコントラクト パイプライン セグメントの間で型のフローが変換されます。 パイプラインの中央部のセグメントはコントラクトであり、IContract インターフェイスから派生します。 このコントラクトにより、ホスト アプリケーションとそのアドインの両方で使用されるメソッドが定義されます。
ホストとアドインを別々のアプリケーション ドメインに読み込む場合、ホスト アプリケーションのスコープとアドインのスコープを区分する分離境界が設定されます。 コントラクトは、ホストとアドインの両方のアプリケーション ドメインに読み込まれる唯一のアセンブリです。 ホストとアドインは、それぞれコントラクト メソッドのビューのみを参照します。 そのため、ホストとアドインはコントラクトの抽象化レイヤーにより区分されます。
パイプライン セグメントを開発するには、それらを格納するディレクトリ構造を作成する必要があります。 開発の要件とスコープのガイドラインについては、「パイプライン開発の必要条件」を参照してください。
以下の図に、パイプライン セグメントを構成する型を示します。 この図に示している型の名前は任意ですが、情報ストアを構築するメソッドにより型を検出できるように、ホストとアドインのホスト ビューを除くすべての型に属性が必要です。
アドイン パイプラインと型
次の表を使用して、アドインをアクティブにするためのパイプライン セグメントについて説明します。 これらのセグメントの詳細については、「コントラクト、ビュー、およびアダプター」を参照してください。
パイプライン セグメント |
説明 |
---|---|
ホスト |
アドインのインスタンスを作成するアプリケーション アセンブリ。 |
アドインのホスト ビュー |
アドインとの通信に使用されるオブジェクト型およびメソッドのホスト アプリケーションのビュー。 ホスト ビューは、抽象基本クラスまたはインターフェイスです。 |
ホスト側アダプター |
メソッドをコントラクトに適合させ、コントラクトをメソッドに適合させる、1 つ以上のクラスを含むアセンブリ。 このパイプライン セグメントは、HostAdapterAttribute 属性を使用して指定されます。 マルチモジュール アセンブリはサポートされません。 |
コントラクト |
IContract インターフェイスから派生したインターフェイス。ホストとアドイン間で型の通信を行うためのプロトコルを定義します。 このパイプライン セグメントは、AddInContractAttribute 属性を設定することで指定します。 |
アドイン側アダプター |
メソッドをコントラクトに適合させ、コントラクトをメソッドに適合させる、1 つ以上のクラスを含むアセンブリ。 このパイプライン セグメントは、AddInAdapterAttribute 属性を使用して指定されます。 AddInAdapterAttribute 属性を持つ型が含まれるアドイン側アダプター ディレクトリ内の各アセンブリが、アドインのアプリケーション ドメインに読み込まれます。 アドイン側ディレクトリの各アセンブリが、専用のアプリケーション ドメインに読み込まれます。 マルチモジュール アセンブリはサポートされません。 |
アドイン ビュー |
ホストとの通信に使用されるオブジェクト型およびメソッドのアドインのビューを表すアセンブリ。 アドイン ビューは、抽象基本クラスまたはインターフェイスです。 このパイプライン セグメントは、AddInBaseAttribute 属性を使用して指定されます。 AddInBaseAttribute 属性を持つ型が含まれる AddInViews ディレクトリ内の各アセンブリが、アドインのアプリケーション ドメインに読み込まれます。 |
アドイン |
ホストに対するサービスを実行する、インスタンス化された型。 |
パイプラインのアクティブ化のパス
次の図に、アドインがアクティブになるときの型のアクティブ化を示します。 この図では、計算結果やオブジェクトのコレクションなど、ホストへ渡されるオブジェクトも示されています。 これは最も一般的なシナリオです。
アドインからホストへのアクティブ化のパス
パイプラインのアクティブ化のパスは次のようになっています。
ホスト アプリケーションにより、Activate メソッドを使用してアドインがアクティブ化されます。
アドイン、アドイン ビュー、アドイン側アダプター、およびコントラクト アセンブリがアドインのアプリケーション ドメインに読み込まれます。
アドイン ビュー (AddInBaseAttribute 属性により指定されるクラスを備えているもの) をコンストラクターとして使用して、アドイン側アダプターのインスタンスが作成されます。 このアドイン側アダプターは、コントラクトを継承します。
コントラクトとして型指定されたアドイン側アダプターが、(オプションの) 分離境界を越えてホスト側アダプターのコンストラクターに渡されます。
アドイン、ホスト側アダプター、およびコントラクト アセンブリがホストのアプリケーション ドメインに読み込まれます。
コントラクトをコンストラクターとして使用して、ホスト側アダプターのインスタンスが作成されます。 このホスト側アダプターは、アドインのホスト ビューを継承します。
ホストには、アドインのホスト ビューとして型指定されたアドインが含まれ、引き続きアドインのメソッドを呼び出すことができます。
チュートリアル
Visual Studio を使用してパイプラインを作成する方法を説明するチュートリアルとして、次の 3 つがあります。
-
ホストに対し加算、減算、乗算、除算を実行する計算機アドインについて解説します。
-
計算機能を強化した計算機アドインについて解説し、最初の計算機アドインとの互換性を維持する方法を説明します。
チュートリアル : アドインとホスト間でのコレクションの受け渡し
書店のシナリオを使って、パイプライン経由でデータ コレクションを渡す方法を解説します。