Arquitectura de extensión ADSI
Las extensiones ADSI se basan en el modelo de agregación COM con varias mejoras. Las extensiones deben cumplir todas las reglas COM. Para obtener más información, consulte la especificación COM.
Esta es una revisión del modelo de agregación COM.
Un agregado, también conocido como objeto interno, es un objeto que crea un agregador. El objeto de extensión es un agregado.
Un agregador, también conocido como objeto externo, es un objeto que crea un agregado. ADSI es un agregador.
El objeto interno delega su IUnknown en el agregador IUnknown.
Las extensiones ADSI agregan las siguientes mejoras a la agregación COM para satisfacer sus requisitos:
- Permite que cada escritor de extensiones extienda objetos ADSI. Un escritor de extensiones puede registrar su extensión con ADSI y no verse afectado por la existencia de otras extensiones. En el modelo de agregación COM, el agregador debe tener el CLSID del agregado. ADSI relaja este requisito haciendo que actúe como agregador para todas las extensiones. Por lo tanto, en lugar de formar una capa de componentes anidados, las extensiones se encuentran en el mismo nivel.
- Permite un objeto, un IDispatch. La compatibilidad con automatización es una de las características más importantes de ADSI. La compatibilidad con la automatización se logra porque ADSI admite la interfaz IDispatch . Se recomienda a los escritores de extensiones que admitan la interfaz IDispatch . Sin embargo, solo debe haber una interfaz IDispatch en un objeto determinado. ADSI integra y recopila las muchas interfaces IDispatch de diferentes extensiones y las presenta como un IDispatch coherente con el controlador de automatización. Cada extensión, cuando se agrega, debe volver a enrutar sus llamadas IDispatch a la IDispatch proporcionada por ADSI.
Todas estas soluciones son posibles debido a los servicios que proporciona el Administrador de objetos ADSI, que residen en cada proveedor ADSI.
En la ilustración siguiente se muestra la arquitectura del modelo de extensión ADSI.
ADSI admite dos niveles de extensión:
- Compatibilidad con enlaces anticipados. Este es el primer nivel de extensión. Una extensión debe admitir el registro e implementar nuevas interfaces. Los consumidores de extensiones deben usar herramientas o hosts de scripting que admitan el enlace anticipado, por ejemplo, Visual C++ , Visual Basic.
- Compatibilidad con enlaces en tiempo de demora. Esto sucede cuando una extensión cumple todos los requisitos de enlace anticipados e implementa una interfaz adicional, IADsExtension. Los implementadores de extensiones pueden usar cualquier herramienta que funcione como controlador de Automatización, como el host de Windows Script, las páginas active server o HTML con VBScript.