Архитектура расширения ADSI
Расширения ADSI основаны на модели агрегирования COM с несколькими улучшениями. Расширения должны соответствовать всем правилам COM. Дополнительные сведения см. в спецификации COM.
Ниже приведен обзор модели агрегирования COM.
Агрегат, также известный как внутренний объект, является объектом, который создает агрегат. Объект расширения — это агрегат.
Агрегат, также известный как внешний объект, является объектом, который создает агрегат. ADSI — это агрегатор.
Внутренний объект делегирует его IUnknown iGgnown в IUnknown в агрегаторе.
Расширения ADSI добавляют следующие улучшения в агрегат COM для удовлетворения своих требований:
- Позволяет каждому модульу записи расширений расширять объекты ADSI. Модуль записи расширений может зарегистрировать его расширение в ADSI и не влиять на существование других расширений. В модели агрегирования COM агрегат должен иметь CLSID агрегата. ADSI смягчает это требование, делая себя агрегатором для всех расширений. Поэтому вместо формирования слоя вложенных компонентов расширения находятся на том же уровне.
- Разрешает один объект, один IDispatch. Поддержка автоматизации является одной из наиболее важных функций ADSI. Поддержка автоматизации достигается, так как ADSI поддерживает интерфейс IDispatch. Записи расширений рекомендуется поддерживать интерфейс IDispatch . Однако в данном объекте должен быть только один интерфейс IDispatch . ADSI интегрируется и собирает множество интерфейсов IDispatch из разных расширений и представляет их как один согласованный IDispatch контроллеру службы автоматизации. Каждое расширение при статистической обработке должно перенаправить вызовы IDispatch к IDispatch, предоставленному ADSI.
Все эти решения возможны из-за служб, предоставляемых диспетчером объектов ADSI, которые находятся в каждом поставщике ADSI.
На следующем рисунке показана архитектура модели расширения ADSI.
ADSI поддерживает два уровня расширения:
- Поддержка ранней привязки. Это первый уровень расширения. Расширение должно поддерживать регистрацию и реализовывать новые интерфейсы. Потребители расширений должны использовать средства или узлы скриптов, поддерживающие раннюю привязку, например Visual C++ , Visual Basic.
- Поддержка последней привязки. Это происходит, когда расширение удовлетворяет всем требованиям к ранней привязке и реализует дополнительный интерфейс, IADsExtension. Реализующие расширения могут использовать любое средство, которое работает в качестве контроллера службы автоматизации, например узел скриптов Windows, страницы Active Server или HTML с VBScript.