Zusammengesetzte Moniker
Eines der nützlichsten Merkmale von Monikern ist, dass Sie Moniker verketten oder verfassen moniker zusammen. 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 zusammenstellen, das mindestens zwei Moniker enthält, die das Äquivalent von Teilpfaden sind. Sie können Moniker derselben Klasse (z. B. zwei Dateimoniker) oder verschiedene Klassen (z. B. einen Dateimoniker und einen Elementmoniker) verfassen. Wenn Sie Ihre eigene Moniker-Klasse schreiben wollten, könnten Sie auch Ihre Moniker mit Datei- oder Elementmonikern verfassen. Der grundlegende Vorteil eines Zusammengesetzts besteht darin, dass es Ihnen einen Codeteil gibt, um jeden möglichen Moniker zu implementieren, der eine Kombination einfacherer Moniker ist. Dadurch wird die Notwendigkeit bestimmter benutzerdefinierter 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 darin enthaltenen Objekte, da kein Container die von einem anderen Container generierten Namen versteht. Moniker ermöglichen es diesen Namespaces, verknüpft zu werden, da Dateimoniker und Elementmoniker zusammengesetzt werden können. Ein Moniker-Client kann den Namespace nach allen Objekten mithilfe eines einzigen Mechanismus durchsuchen. Der Client ruft einfach IMoniker::BindToObject für den Moniker auf, und der Moniker-Code behandelt den Rest. Ein Aufruf von IMoniker::GetDisplayName für ein Zusammengesetzt erstellt einen Namen mithilfe der Verkettung aller Anzeigenamen der einzelnen Moniker.
Da Sie ihre eigene Moniker-Klasse schreiben können, können Sie mit der Moniker-Komposition benutzerdefinierte Erweiterungen zum Namespace für Objekte hinzufügen.
Manchmal können zwei Moniker bestimmter Klassen auf besondere Weise kombiniert werden. Beispielsweise kann 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 Datei moniker "c:\work\art" mit der relativen Datei moniker "..\backup\myfile.doc" gleich "c:\work\backup\myfile.doc". Dies ist ein Beispiel für nichtgenerische Komposition.
generische Kompositionandererseits erlaubt die Verbindung von zwei Monikern, unabhängig von ihren Klassen. Sie könnten z. B. einen Elementmoniker in einem Dateimoniker verfassen, obwohl nicht natürlich der andere Weg.
Da eine nichtgenerische 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 nichtgenerischen Kompositionen definieren, wenn Sie eine neue Monikerklasse schreiben. Im Gegensatz dazu werden generische Kompositionen durch OLE definiert. Moniker, die als Ergebnis einer generischen Zusammensetzung geschaffen wurden, werden als generische zusammengesetzte Moniker bezeichnet.
Diese drei Klassen, Dateimoniker, Elementmoniker und generische zusammengesetzte Moniker, alle arbeiten zusammen, und sie sind die am häufigsten verwendeten Klassen von Monikern.
Moniker-Clients sollten IMoniker::ComposeWith aufrufen, um einen Verbund auf Moniker mit einem anderen zu erstellen. Der Moniker, der intern aufgerufen wird, entscheidet, ob er eine generische oder nichtgenerische Zusammensetzung durchführen kann. Wenn die Moniker-Implementierung bestimmt, dass eine generische Komposition verwendet werden kann, stellt OLE die CreateGenericComposite--Funktion bereit, um dies zu erleichtern.
Verwandte Themen