Фреймворк управляемой расширяемости - Managed Extensibility Framework
Разработчики) | Microsoft |
---|---|
Стабильный выпуск | V1 в .NET Framework 4.0 / 12 апреля 2010 г. |
Предварительный выпуск | Версия 2, превью 5/19 декабря 2011 г. |
Репозиторий | github |
Написано в | .NET языки |
Операционная система | Windows |
Платформа | .NET Framework |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия MIT[1] |
Интернет сайт | документы |
Фреймворк управляемой расширяемости (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 определять, какие части, импорт и экспорт доступны через обнаружение.