ADSI 扩展体系结构

ADSI 扩展基于 COM 聚合模型,具有多项增强功能。 扩展必须遵循所有 COM 规则。 有关详细信息,请参阅 COM 规范。

下面介绍 COM 聚合模型。

com aggregation model

聚合也称为内部对象,是聚合器创建的对象。 扩展对象是聚合。

聚合器也称为外部对象,是创建聚合的对象。 ADSI 是聚合器。

内部对象将其 IUnknown 委托给聚合器的 IUnknown

ADSI 扩展在 COM 聚合中添加了以下增强功能,以满足其要求:

  • 使每个扩展编写器都可扩展 ADSI 对象。 扩展编写器可以将扩展注册到 ADSI,并且不受存在其他扩展的影响。 在 COM 聚合模型中,聚合器必须具有聚合的 CLSID。 ADSI 可将自身设为所有扩展的聚合器,以放宽这项要求。 因此,扩展不是形成嵌套组件的层,而是位于同一级别。
  • 允许一个对象、一个 IDispatch。 自动化支持是 ADSI 最重要的功能之一。 可实现自动化支持,因为 ADSI 支持 IDispatch 接口。 鼓励扩展编写器支持 IDispatch 接口。 但是,给定对象上只能有一个 IDispatch 接口。 ADSI 从不同的扩展集成并收集许多 IDispatch 接口,并将这些接口作为一个一致的 IDispatch 呈现给自动化控制器。 聚合时,每个扩展都必须将其 IDispatch 调用重新路由到 ADSI 提供的 IDispatch

所有这些解决方案都可行,因为 ADSI 对象管理器提供的服务驻留在每个 ADSI 提供程序上。

下图显示了 ADSI 扩展模型体系结构。

adsi extension model architecture

ADSI 支持两个扩展级别:

  • 早期绑定支持。 这是第一个扩展级别。 扩展必须支持注册并实现新接口。 扩展使用者必须使用支持早期绑定的工具或脚本主机,例如 Visual C++ 和 Visual Basic。
  • 后期绑定支持。 当扩展满足所有早期绑定要求并实现附加接口 IADsExtension 时,就会发生这种情况。 扩展实现者可以使用任何作为自动化控制器运行的工具,例如 Windows 脚本主机、Active Server Pages 或带 VBScript 的 HTML。