Condividi tramite


Moniker compositi

Una delle caratteristiche più utili dei moniker è che è possibile concatenare o comporre moniker insieme. Un moniker composito è un moniker che è una composizione di altri moniker e può determinare la relazione tra le parti. In questo modo è possibile assemblare il percorso completo di un oggetto dato due o più moniker equivalenti a percorsi parziali. È possibile comporre moniker della stessa classe (ad esempio due moniker di file) o di classi diverse (ad esempio un moniker di file e un moniker di elemento). Se si dovesse scrivere una classe moniker personalizzata, è anche possibile comporre i moniker con moniker di file o elemento. Il vantaggio di base di un composito è che offre una parte di codice per implementare ogni possibile moniker che è una combinazione di moniker più semplici. Ciò riduce significativamente la necessità di classi moniker personalizzate specifiche.

Poiché i moniker di classi diverse possono essere composti tra loro, i moniker offrono la possibilità di unire più spazi dei nomi. Il file system definisce uno spazio dei nomi comune per gli oggetti archiviati come file perché tutte le applicazioni comprendono un nome di percorso del file system. Analogamente, un oggetto contenitore definisce anche uno spazio dei nomi privato per gli oggetti che contiene perché nessun contenitore riconosce i nomi generati da un altro contenitore. I moniker consentono di unire questi spazi dei nomi perché i moniker di file e i moniker degli elementi possono essere composti. Un client moniker può cercare tutti gli oggetti nello spazio dei nomi usando un unico meccanismo. Il client chiama semplicemente IMoniker::BindToObject sul moniker e il codice del moniker gestisce il resto. Una chiamata a IMoniker::GetDisplayName in un composito crea un nome usando la concatenazione di tutti i nomi visualizzati dei singoli moniker.

Inoltre, poiché è possibile scrivere una classe moniker personalizzata, la composizione del moniker consente di aggiungere estensioni personalizzate allo spazio dei nomi per gli oggetti.

A volte due moniker di classi specifiche possono essere combinati in modo speciale. Ad esempio, un moniker di file che rappresenta un percorso incompleto e un altro moniker di file che rappresenta un percorso relativo può essere combinato per formare un singolo moniker di file che rappresenta il percorso completo. Ad esempio, i moniker di file "c:\work\art" possono essere composti con il moniker relativo del file ".. \backup\myfile.doc" uguale a "c:\work\backup\myfile.doc". Questo è un esempio di composizione non generica.

La composizione generica, d'altra parte, consente la connessione di due moniker, indipendentemente dalle classi. Ad esempio, è possibile comporre un moniker di elemento in un moniker di file, anche se non, naturalmente, in altro modo.

Poiché una composizione non generica dipende dalla classe dei moniker coinvolti, i relativi dettagli sono definiti dall'implementazione di una determinata classe moniker. È possibile definire nuovi tipi di composizioni non generiche se si scrive una nuova classe moniker. Al contrario, le composizioni generiche sono definite da OLE. I moniker creati come risultato della composizione generica sono denominati moniker compositi generici.

Queste tre classi, moniker di file, moniker elemento e moniker compositi generici, interagiscono tutti e sono le classi più usate di moniker.

I client moniker devono chiamare IMoniker::ComposeWith per creare un moniker composito con un altro. Il moniker che viene chiamato internamente decide se può eseguire una composizione generica o non generica. Se l'implementazione del moniker determina che una composizione generica è utilizzabile, OLE fornisce la funzione CreateGenericComposite per facilitare questa operazione.

Anti-moniker

Moniker di classe

Moniker di file

Moniker elemento

Moniker puntatore