Zusammengesetzte Moniker

Eines der nützlichsten Features von Monikern ist, dass Sie Moniker verketten oder zusammen verfassen können. Ein zusammengesetzter Moniker ist ein Moniker, der eine Zusammensetzung anderer Moniker ist und die Beziehung zwischen den Teilen bestimmen kann. Auf diese Weise können Sie den vollständigen Pfad zu einem Objekt zusammensetzen, wenn zwei oder mehr Moniker angegeben sind, die partiellen Pfaden entsprechen. Sie können Moniker derselben Klasse (z. B. zwei Dateimoniker) oder verschiedener Klassen (z. B. einem Dateimoniker und einem Elementmoniker) erstellen. Wenn Sie Eine eigene Moniker-Klasse schreiben würden, könnten Sie Ihre Moniker auch mit Datei- oder Elementmonikern verfassen. Der grundlegende Vorteil eines zusammengesetzten besteht darin, dass es Ihnen ein Stück Code bietet, um jeden möglichen Moniker zu implementieren, der eine Kombination aus einfacheren Monikern ist. Dadurch wird der Bedarf an bestimmten benutzerdefinierten Monikerklassen erheblich reduziert.

Da Moniker verschiedener Klassen miteinander zusammengesetzt werden können, bieten Moniker die Möglichkeit, mehrere Namespaces zu verbinden. Das Dateisystem definiert einen allgemeinen Namespace für Objekte, die als Dateien gespeichert sind, da alle Anwendungen einen Dateisystempfadnamen verstehen. Ebenso definiert ein Containerobjekt auch einen privaten Namespace für die objekte, die es enthält, da kein Container die von einem anderen Container generierten Namen versteht. Moniker ermöglichen die Einbindung dieser Namespaces, da Dateimoniker und Elementmoniker zusammengesetzt werden können. Ein Monikerclient kann den Namespace mithilfe eines einzelnen Mechanismus nach allen Objekten durchsuchen. Der Client ruft einfach IMoniker::BindToObject für den Moniker auf, und der Monikercode verarbeitet den Rest. Bei einem Aufruf von IMoniker::GetDisplayName in einem zusammengesetzten Objekt wird ein Name erstellt, der die Verkettung aller Anzeigenamen der einzelnen Moniker verwendet.

Da Sie außerdem Eine eigene Monikerklasse schreiben können, können Sie mit der Monikerkomposition dem Namespace für Objekte benutzerdefinierte Erweiterungen hinzufügen.

Manchmal können zwei Moniker bestimmter Klassen auf besondere Weise kombiniert werden. Beispielsweise können ein Dateimoniker, der einen unvollständigen Pfad darstellt, und ein anderer Dateimoniker, der einen relativen Pfad darstellt, kombiniert werden, um einen einzelnen Dateimoniker zu bilden, der den vollständigen Pfad darstellt. Beispielsweise könnten die Dateimoniker "c:\work\art" mit dem relativen Dateimoniker "." zusammengesetzt werden. \backup\myfile.doc" auf "c:\work\backup\myfile.doc". Dies ist ein Beispiel für eine nicht generische Zusammensetzung.

Die generische Zusammensetzung hingegen ermöglicht die Verbindung von zwei beliebigen Monikern, unabhängig davon, welche Klassen sie haben. Beispielsweise könnten Sie einen Elementmoniker auf einen Dateimoniker verfassen, aber natürlich nicht umgekehrt.

Da eine nicht generische Zusammensetzung von der Klasse der beteiligten Moniker abhängt, werden ihre Details durch die Implementierung einer bestimmten Monikerklasse definiert. Sie können neue Typen von nicht generischen Kompositionen definieren, wenn Sie eine neue Monikerklasse schreiben. Im Gegensatz dazu werden generische Kompositionen durch OLE definiert. Moniker, die als Ergebnis einer generischen Komposition erstellt werden, werden als generische zusammengesetzte Moniker bezeichnet.

Diese drei Klassen, Dateimoniker, Elementmoniker und generische zusammengesetzte Moniker, funktionieren alle zusammen und sind die am häufigsten verwendeten Klassen von Monikern.

Moniker-Clients sollten IMoniker::ComposeWith aufrufen, um einen zusammengesetzten Moniker mit einem anderen zu erstellen. Der Moniker, auf dem intern aufgerufen wird, entscheidet, ob er eine generische oder nicht generische Zusammensetzung durchführen kann. Wenn die Monikerimplementierung bestimmt, dass eine generische Komposition verwendet werden kann, stellt OLE die CreateGenericComposite-Funktion bereit, um dies zu erleichtern.

Anti-Moniker

Moniker-Klasse

Dateimoniker

Item Monikers

Zeigermoniker