Sammansatta monikers
En av de mest användbara funktionerna i monikers är att du kan sammanfoga eller skriva monikers tillsammans. En sammansatt moniker är en moniker som är en sammansättning av andra moniker och kan fastställa relationen mellan delarna. På så sätt kan du montera den fullständiga sökvägen till ett objekt med två eller flera monikers som motsvarar partiella sökvägar. Du kan skriva monikers av samma klass (till exempel två filmonikers) eller av olika klasser (till exempel en filmoniker och en objektmoniker). Om du skulle skriva en egen monikerklass kan du också skriva monikers med fil- eller objektmonikers. Den grundläggande fördelen med en komposit är att den ger dig en kod för att implementera alla möjliga moniker som är en kombination av enklare monikers. Det minskar avsevärt behovet av specifika anpassade monikerklasser.
Eftersom monikers av olika klasser kan bestå av varandra, ger monikers möjlighet att ansluta till flera namnområden. Filsystemet definierar ett gemensamt namnområde för objekt som lagras som filer eftersom alla program förstår ett filsystemsökvägsnamn. På samma sätt definierar ett containerobjekt också ett privat namnområde för de objekt som det innehåller eftersom ingen container förstår namnen som genereras av en annan container. Monikers tillåter att dessa namnområden kopplas eftersom filmonikers och objektmonikers kan bestå. En moniker-klient kan söka i namnområdet efter alla objekt med hjälp av en enda mekanism. Klienten anropar helt enkelt IMoniker::BindToObject på monikern och monikerkoden hanterar resten. Ett anrop till IMoniker::GetDisplayName på en sammansatt skapar ett namn med sammanlänkningen av alla enskilda monikers visningsnamn.
Eftersom du kan skriva en egen monikerklass kan du dessutom lägga till anpassade tillägg i namnområdet för objekt med monikersammansättning.
Ibland kan två monikers av specifika klasser kombineras på ett speciellt sätt. Till exempel kan en filmoniker som representerar en ofullständig sökväg och en annan filmoniker som representerar en relativ sökväg kombineras för att bilda en enda filmoniker som representerar den fullständiga sökvägen. Filmonikers "c:\work\art" kan till exempel bestå av den relativa filmonikern "..\backup\myfile.doc" till lika med "c:\work\backup\myfile.doc". Det här är ett exempel på icke-generisk sammansättning.
Generisk sammansättning, å andra sidan, tillåter anslutning av två monikers, oavsett vad deras klasser. Du kan till exempel skriva ett objektmoniker till en filmoniker, men inte tvärtom.
Eftersom en icke-generisk sammansättning är beroende av klassen för de berörda monikerna definieras dess information av implementeringen av en viss monikerklass. Du kan definiera nya typer av icke-generiska kompositioner om du skriver en ny monikerklass. Generiska kompositioner definieras däremot av OLE. Monikers som skapats som ett resultat av generisk komposition kallas generiska sammansatta monikers.
Dessa tre klasser, filmonikers, objektmonikers och generiska sammansatta monikers, fungerar alla tillsammans, och de är de vanligaste klasserna av monikers.
Moniker-klienter bör anropa IMoniker::ComposeWith för att skapa en sammansatt moniker med en annan. Monikern som den anropas på avgör internt om den kan göra en generisk eller icke-generisk sammansättning. Om moniker-implementeringen fastställer att en allmän sammansättning kan användas tillhandahåller OLE CreateGenericComposite- funktion för att underlätta detta.
Relaterade ämnen