Monikers compuestos
Una de las características más útiles de monikers es que puede concatenar o componer monikers juntos. Un moniker compuesto es un moniker que es una composición de otros monikers y puede determinar la relación entre las partes. Esto le permite ensamblar la ruta de acceso completa a un objeto dados dos o más monikers que son equivalentes a rutas de acceso parciales. Puede componer monikers de la misma clase (como dos monikers de archivo) o de clases diferentes (como un moniker de archivo y un moniker de elemento). Si tuviera que escribir su propia clase de moniker, también podría componer sus monikers con monikers de archivo o elemento. La ventaja básica de un compuesto es que proporciona un fragmento de código para implementar cada moniker posible que es una combinación de monikers más sencillos. Esto reduce significativamente la necesidad de clases de moniker personalizadas específicas.
Dado que los monikers de diferentes clases se pueden componer entre sí, los monikers proporcionan la capacidad de unir varios espacios de nombres. El sistema de archivos define un espacio de nombres común para los objetos almacenados como archivos porque todas las aplicaciones comprenden un nombre de ruta de acceso del sistema de archivos. Del mismo modo, un objeto contenedor también define un espacio de nombres privado para los objetos que contiene porque ningún contenedor entiende los nombres generados por otro contenedor. Los monikers permiten que estos espacios de nombres se unan porque los monikers de archivos y los monikers de elementos se pueden componer. Un cliente de moniker puede buscar el espacio de nombres para todos los objetos mediante un único mecanismo. El cliente simplemente llama a IMoniker::BindToObject en el moniker y el código de moniker controla el resto. Una llamada a IMoniker::GetDisplayName en un compuesto crea un nombre con la concatenación de todos los nombres para mostrar de los monikers individuales.
Además, dado que puede escribir su propia clase de moniker, la composición del moniker permite agregar extensiones personalizadas al espacio de nombres para los objetos.
A veces, se pueden combinar dos monikers de clases específicas de forma especial. Por ejemplo, un moniker de archivo que representa una ruta de acceso incompleta y otro moniker de archivo que representa una ruta de acceso relativa se puede combinar para formar un único moniker de archivo que representa la ruta de acceso completa. Por ejemplo, los monikers de archivo "c:\work\art" se podrían componer con el moniker del archivo relativo "..\backup\myfile.doc" para que sea igual a "c:\work\backup\myfile.doc". Este es un ejemplo de composición no genérica.
composición genérica, por otro lado, permite la conexión de dos monikers, independientemente de sus clases. Por ejemplo, podría crear un moniker de elemento en un moniker de archivo, aunque no, por supuesto, de otro modo.
Dado que una composición no genérica depende de la clase de los monikers implicados, sus detalles se definen mediante la implementación de una clase de moniker determinada. Puede definir nuevos tipos de composiciones no genéricas si escribe una nueva clase de moniker. Por el contrario, OLE define composiciones genéricas. Los monikers creados como resultado de la composición genérica se denominan monikers compuestos genéricos.
Estas tres clases, monikers de archivo, monikers de elementos y monikers compuestos genéricos, funcionan juntos y son las clases de monikers más usadas.
Los clientes de Moniker deben llamar a IMoniker::ComposeWith para crear un compuesto en moniker con otro. El moniker en el que se llama decide internamente si puede hacer una composición genérica o no genérica. Si la implementación del moniker determina que se puede usar una composición genérica, OLE proporciona la funcióncreateGenericCompositepara facilitar esto.
Temas relacionados