Поделиться через


Составные моникеры

Одним из наиболее полезных функций моникеров является то, что вы можете объединить или создавать моникеры вместе. Составной моникер является моникером , который является составом других моникеров и может определить отношение между частями. Это позволяет собрать полный путь к объекту с двумя или более моникерами, которые эквивалентны частичным путям. Вы можете создавать моникеры одного и того же класса (например, два моникера файла) или различные классы (например, моникер файла и моникер элемента). Если вы хотите написать собственный класс моникера, вы также можете создать моникеры с файлами или моникерами элементов. Основным преимуществом составного является то, что он дает вам один фрагмент кода для реализации каждого возможного моникера, который является сочетанием более простых моникеров. Это значительно снижает потребность в определенных пользовательских моникерах классов.

Так как моникеры разных классов могут создаваться друг с другом, моникеры обеспечивают возможность объединения нескольких пространств имен. Файловая система определяет общее пространство имен для объектов, хранящихся в виде файлов, так как все приложения понимают имя пути файловой системы. Аналогичным образом объект контейнера также определяет частное пространство имен для объектов, содержащихся в нем, так как контейнер не понимает имена, созданные другим контейнером. Моникеры позволяют присоединяться к этим пространствам имен, так как моникеры файлов и моникеры элементов могут быть составлены. Клиент моникера может выполнять поиск пространства имен для всех объектов с помощью одного механизма. Клиент просто вызывает IMoniker::BindToObject на моникере, а код моникера обрабатывает остальные. Вызов IMoniker::GetDisplayName в составном создает имя, используя объединение всех отображаемых имен моникеров.

Кроме того, поскольку вы можете написать собственный класс моникера, моникер композиции позволяет добавлять настраиваемые расширения в пространство имен для объектов.

Иногда два моникера конкретных классов могут быть объединены особым образом. Например, моникер файла, представляющий неполный путь и другой моникер файла, представляющий относительный путь, можно объединить для формирования одного моникера файла, представляющего полный путь. Например, моникеры файла "c:\work\art" можно создать с относительным моникером файла .. \backup\myfile.doc" равным "c:\work\backup\myfile.doc". Это пример негенерической композиции.

С другой стороны, универсальная композиция позволяет подключить всех двух моникеров, независимо от того, что их классы. Например, можно создать моникер элемента на моникер файла, хотя и нет, конечно, наоборот.

Поскольку негенерическая композиция зависит от класса участвующих моникеров, его детали определяются реализацией определенного моникера класса. При написании нового моникера можно определить новые типы негенерических композиций. Напротив, универсальные композиции определяются OLE. Моникеры, созданные в результате универсальной композиции, называются универсальными моникерами.

Эти три класса, моникеры файлов, моникеры элементов и универсальные составные моникеры, все работают вместе, и они являются наиболее часто используемыми классами моникеров.

Клиенты Moniker должны вызывать IMoniker::ComposeWith , чтобы создать составной на моникере с другим. Моникер, который он вызывается на внутренней основе решает, может ли он делать универсальную или негенерическую композицию. Если реализация моникера определяет, что универсальная композиция подходит для использования, OLE предоставляет функцию CreateGenericComposite , чтобы упростить эту задачу.

Анти-Моникеры

Моникеры классов

Моникеры файлов

Моникеры элементов

Указатели Моникеры