Моникер

Моникер

Объект в архитектуре Microsoft COM.

Описание

Моникер является неизменяемым объектом, инициализируемым строкой, и имеющим операцию «создать экземпляр объекта из сохраненных данных, которые находятся в месте, указанном данной строкой». Иными словами, это реализация паттерна Строитель, инициализируемая строкой и не изменяемая.

Создание экземпляра «рабочего» объекта называется bind.

Для моникеров определены операции сравнения на равенство, а также операция композиции моникеров и разности моникеров (моникер, который в случае композиции с A даст B, метод называется RelativePathTo).

Главные типы моникеров:

  • file moniker. Строка есть путь к файлу. Реализована композиция как сочетание путей и RelativePathTo. Bind означает — определение класса объекта по суффиксу имени файла, создание пустого экземпляра этого класса, получение у него интерфейса IPersistFile и затем вызов IPersistFile->Load().
  • item moniker. Может использоваться только с правой стороны композиции. Результат композиции есть generic composite. Bind означает — получение интерфейса IOleItemContainer на «левосторонний» объект, и вызов IOleItemContainer->GetObject.
  • generic composite. Хранит внутри себя 2 моникера — левый и правый. Bind означает — bind «левого» моникера, потом bind «правого», который всегда есть item moniker.

Функция ole32!MkParseDisplayName получает строку и создает объект «моникер» одного из вышеуказанных типов, используя синтаксис file!item!item!item для композитов.

Моникеры используются для вставки в один документ ссылок на другой по технологии OLE.

URL Moniker

Строка есть URL в стандартном синтаксисе.

В отличие от вышеуказанных моникеров, URL Moniker асинхронен — Bind возвращается сразу, а объект (и тем более объект с загруженным в него данными) получается куда позже. Для слежения за ходом привязки в моникере можно регистрировать bind status callbacks.

Сам загружаемый объект тоже может регистрировать bind status callbacks в своем же моникере (в случае, если объект поддерживает интерфейс IPersistMoniker), что служит для поддержки прогрессивной загрузки с перерисовкой экрана при «приезде» новой порции данных объекта.

Класс объекта получается следующими способами: — если протокол привязки поддерживает понятие Content-Type — то берется этот тип, и смотрится в реестре HKLM\MIME\Database — если нет — то используются типичные побайтовые паттерны в начале данных объекта — если и это не получилось — то используется суффикс имени файла в URL

Как только удалось определить класс объекта, процедура привязки (исполняется в фоновом потоке) создает экземпляр и оповещает об этом внешний мир через bind status callbacks. В этот момент внешний мир может, например, «усадить» созданный объект в окно Windows через интерфейсы OLE, показав его тем самым на экране.

Далее, если объект поддерживает IPersistMoniker, то моникер зовет этот интерфейс, предлагая объекту загрузится с себя. Объект регистрирует уже свои bind status callbacks и получает через них очередные порции данных.

Если IPersistMoniker отсутствует, то моникер использует следующие возможности:

  • IPersistStream с созданием IStream на потоке данных моникера
  • полную откачку всех данных в Temporary Internet Files, и затем загрузку их в объект через IPersistFile.

URL Moniker поддерживает различные bind protocols (объекты с интерфейсом IBindProtocol). Они должны быть зарегистрированы в реестре в таблице, поиск в ней идет по префиксу URL — http, ftp, ed2k и так далее.

Bind protocol открывает каким-то образом поток данных по переданному в него URL, качает данные, и также может возвращать те или иные атрибуты этих данных, такие, как Last-Modified и Content-Type.

Реализация URL Moniker находится в urlmon.dll, там же находится реализация bind protocols для http, https и ftp — они выполнены как обертки вокруг вызовов wininet.dll (последняя есть HTTP клиент).

Вызов urlmon!MkParseDisplayNameEx создает URL Moniker по строке URL.

URL Moniker используется в Microsoft Internet Explorer для всей загрузки страниц и вложенных в них объектов. Наличие «втыкаемых» bind protocols позволяет крайне легко втыкать в MSIE свои типы URL, такие, как ed2k://, а интерфейс IPersistMoniker облегчает написание обработчиков документов с поддержкой прогрессивной загрузки с веб-страницы.

POST формы в веб-странице также реализован как URL Moniker bind, данные формы при этом укладываются в специальный bind status callback.


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Моникер" в других словарях:

  • Строитель (шаблон проектирования) — У этого термина существуют и другие значения, см. Строитель. Шаблон проектирования Строитель Builder Тип: порождающий Описан в Design Patterns Да Строитель (англ. Builder)  п …   Википедия

  • Клуб «Рай» (фильм) — Клуб «Рай» Club Paradise Жанр комедия …   Википедия

  • Клуб «Рай» — Club Paradise Жанр …   Википедия

  • Уорден, Джек — Джек Уорден Jack Warden (слева) Имя при рождени …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»