.NET - Архитектура на основе подключаемых модулей

Managed Extensible Framework (MEF) существует уже давно, и я все еще считаю, что новичок должен начать с простой статьи. Теперь это важный компонент. NET Framework 4.0 и может использоваться в любом приложении или реализации.

Что, черт возьми, такое MEF?

Managed Extensible Framework - это платформа от корпорации Microsoft для создания расширяемых приложений. Его основная цель - подключить компоненты к уже запущенному приложению. Он является неотъемлемой частью .NET 4.0 Framework и находит свое применение в любых приложениях .NET.

Жизнь до МЭФ

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

MEF в СПАСЕНИИ!

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

Номенклатура MEF:

Прежде чем приступить к рассмотрению того, как работает Managed Extensible Framework, давайте взглянем на базовую терминологию, которая, несомненно, поможет нам понять ее с большой легкостью.

  1. Деталь: Деталь - это объект (например, класс, метод или свойство), который может быть экспортирован плагином и импортирован приложением.
  2. Каталог: объект, который помогает находить доступные составные части из сборки или каталога.
  3. Контракт: Импортируемая и экспортированная части должны взаимодействовать между собой через некоторый контракт (например, интерфейс или предопределенный тип данных, например string).
  4. Атрибут импорта: он действует как крючок или розетка. Определяет потребность детали. Это применимо только для одного атрибута экспорта.
  5. Атрибут ImportMany: он аналогичен атрибуту импорта, но поддерживает несколько атрибутов экспорта.
  6. Атрибут экспорта: действует как заглушка, которую можно подключить к сокету (например, импорт) для завершения потока. Атрибут импорта создает необходимость. Атрибут экспорта выполняет это. Это показывает, что эти части будут участвовать в композиции.
  7. Составить. На языке MEF составить - это та область, в которой экспортируемая часть и импорт взаимодействуют друг с другом, экспортированные части будут собраны вместе с импортированными.

До этого момента мы хорошо знакомы с терминологией, из которой состоит Managed Extensible Framework. Теперь давайте посмотрим, как это работает.

MEF в работе:

Если вы знакомы с принципом спроса и предложения, вы почти у цели!
В Managed Extensible Framework необходимо и нужно обнаружить предлагаемую часть. И поставляемая, и необходимая часть должны быть согласованы с контрактом (например, интерфейс). Когда возникает потребность в подключении некоторых частей к приложению, MEF выполняет динамическое обнаружение этих частей в каталоге или сборке из некоторого места (например, из каталога). Механизм композиции (например, контейнер композиции) будет собирать эти части вместе, пока они удовлетворяют условиям контракта.

Давайте будем практичными…

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

Кайротическая сборка для расширения возможностей вашего приложения: ‘System.ComponentModel.Composition.dll’

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

Нам нужно убедиться, что атрибуты import и export имеют один и тот же тип интерфейса, как показано IContract.
Экспортированная часть, 'Добавить', Согласитесь с правилами договора.

Контейнер для композиции:

После создания метода экспорта и контракта нам нужно сообщить об импорте (сокет) и экспорте (плагин), чтобы завершить цикл.
CompononetAssembler - это основная часть; Обнаруженные динамические и статические ссылки затем добавляются в Каталог, чтобы сделать их обнаруженными.

При прекращении…

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

Пожалуйста, поделитесь своими ответами и отзывами ниже. Мне особенно хотелось бы услышать, работаете ли вы в настоящее время над проектом MEF, и хотелось бы рассказать, как он помог (или, возможно, помешал) вам в этом процессе. Ваше здоровье!