Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Managed Extensibility Framework ( MEF ) - это компонент .NET Framework 4.0, предназначенный для создания легких расширяемых приложений. Его цель - позволить разработчикам приложений .NET обнаруживать и использовать расширения без необходимости настройки. Он также направлен на то, чтобы позволить разработчикам расширений легко инкапсулировать код и избегать хрупких жестких зависимостей. Кроме того, он нацелен на повторное использование расширений в приложениях. MEF был представлен как часть .NET 4.0 и Silverlight 4 .

Обзор [ править ]

MEF направлен на решение проблемы расширяемости среды выполнения. Без MEF любое приложение, которое хочет поддерживать модель плагина, должно создавать свою собственную инфраструктуру с нуля. Эти плагины часто зависят от приложения и не могут быть повторно использованы в нескольких реализациях.

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

Дизайн [ править ]

Грубо говоря, ядро ​​MEF состоит из каталога и CompositionContainer. Каталог отвечает за обнаружение расширений, а контейнер координирует создание и удовлетворяет зависимости.

  • Первоклассный гражданин MEF - это класс ComposablePart. Составная часть предлагает один или несколько операций экспорта, а также может зависеть от одной или нескольких внешних служб или операций импорта. Составная часть также управляет экземпляром, который может быть экземпляром объекта данного типа (он находится в реализации MEF по умолчанию) [ требуется пояснение ] . MEF, однако, является расширяемым, и могут быть предоставлены дополнительные реализации ComposablePart, если они соответствуют контрактам на импорт / экспорт.
  • Каждый экспорт и импорт имеют Контракт. Контракты - это мост между экспортом и импортом. Контракт на экспорт может состоять из дополнительных метаданных, которые можно использовать для фильтрации при их обнаружении. Например, он может указывать на конкретную возможность, которую предлагает экспорт.
  • Контейнер MEF взаимодействует с каталогами, чтобы иметь доступ к составным частям. Сам контейнер разрешает зависимости части и предоставляет экспорт во внешний мир. Экземпляры составных частей могут быть добавлены непосредственно в контейнер.
  • ComposablePart, возвращаемый каталогом, скорее всего, будет расширением приложения. Он может иметь импорт (зависимости) от компонентов, предлагаемых ведущим приложением, и, вероятно, экспортировать другие.
  • Реализация составной части MEF по умолчанию использует метаданные на основе атрибутов для объявления экспорта и импорта. Это позволяет MEF определять, какие части, импорт и экспорт доступны через обнаружение.

Ссылки [ править ]

Внешние ссылки [ править ]