ADSI 拡張機能のアーキテクチャ
ADSI 拡張機能は、いくつかの拡張機能を備えた COM 集計モデルに基づいています。 拡張機能は、すべての COM 規則に従う必要があります。 詳細については、COM 仕様を参照してください。
COM 集計モデルのレビューを次に示します。
集約 (内部オブジェクトとも呼ばれます) は、アグリゲーターが作成するオブジェクトです。 拡張機能オブジェクトは集計です。
アグリゲーター (外部オブジェクトとも呼ばれます) は、集計を作成するオブジェクトです。 ADSI はアグリゲーターです。
内部オブジェクトは、その IUnknown をアグリゲーターの IUnknown に委任します。
ADSI 拡張機能では、COM 集計に次の機能強化が追加され、その要件が満たされます。
- 各拡張機能ライターが ADSI オブジェクトを拡張できるようにします。 拡張機能ライターは、拡張機能を ADSI に登録でき、他の拡張機能の存在の影響を受けないようにすることができます。 COM 集計モデルでは、アグリゲーターに集計の CLSID が必要です。 ADSI は、それ自体をすべての拡張機能のアグリゲーターとして機能させることで、この要件を緩和します。 したがって、入れ子になったコンポーネントのレイヤーを形成する代わりに、拡張機能は同じレベルになります。
- 1 つのオブジェクト (1 つの IDispatch) を許可します。 Automation のサポートは、ADSI の最も重要な機能の 1 つです。 AUTOMATION のサポートは、ADSI が IDispatch インターフェイスをサポートしているために実現されます。 拡張機能ライターは、IDispatch インターフェイスをサポートすることをお勧めします。 ただし、特定のオブジェクトには IDispatch インターフェイスが 1 つだけ必要です。 ADSI は、さまざまな拡張機能から多数 の IDispatch インターフェイスを統合して収集し、それらを 1 つの一貫性のある IDispatch として Automation コントローラーに提示します。 集約された各拡張機能は、その IDispatch 呼び出しを ADSI によって提供される IDispatch に再ルーティングする必要があります。
これらのソリューションはすべて、ADSI オブジェクト マネージャーが提供するサービスが、各 ADSI プロバイダーに存在するため可能です。
次の図は、ADSI 拡張モデルのアーキテクチャを示しています。
ADSI では、次の 2 つのレベルの拡張機能がサポートされています。
- 早期バインディングのサポート。 これは、拡張機能の最初のレベルです。 拡張機能は登録をサポートし、新しいインターフェイスを実装する必要があります。 拡張機能コンシューマーは、Visual C++ や Visual Basic などの早期バインディングをサポートするツールまたはスクリプト ホストを使用する必要があります。
- 遅延バインディングのサポート。 これは、拡張機能が初期バインディング要件をすべて満たし、追加のインターフェイス である IADsExtension を実装する場合に発生します。 拡張機能の実装者は、Windows スクリプト ホスト、Active Server ページ、VBScript を使用した HTML など、オートメーション コントローラーとして動作する任意のツールを使用できます。