MEF (платформа управляемой расширяемости) против IoC / DI

StackOverflow https://stackoverflow.com/questions/108116

Вопрос

Какие проблемы решает MEF (Managed Extensibility Framework), которые не могут быть решены существующими контейнерами IoC / DI?

Это было полезно?

Решение

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

Еще одна проблема, которую решает MEF, которая отличается от обычных подозрений IoC и является одной из сильных сторон MEF, - это обнаружение [расширения].В нем есть множество расширяемых механизмов обнаружения, которые работают с метаданными, которые вы можете связать с расширениями.С сайта MEF CodePlex:

"MEF позволяет помечать расширения дополнительными метаданными, что облегчает расширенные запросы и фильтрацию".

В сочетании с возможностью задержки загрузки помеченных расширений, возможность запрашивать метаданные расширения предшествующий загрузка открывает дверь для множества интересных сценариев и существенно расширяет возможности, такие как управление версиями [подключаемого модуля].

MEF также имеет "Адаптеры контрактов", которые позволяют "адаптировать" или "трансформировать" расширения (от типа > к типу) с полным контролем над деталями этих преобразований.Контрактные адаптеры открывают еще один творческий фронт по отношению к тому, что означает и влечет за собой "открытие".

Опять же, "намерение" MEFs тесно сосредоточено на расширяемости анонимных подключаемых модулей, что очень сильно отличает его от других контейнеров IoC.Таким образом, хотя MEF можно использовать для составления композиций, это всего лишь небольшое пересечение его возможностей по сравнению с другими IOC, с которыми, я подозреваю, в будущем мы увидим много кровосмесительных взаимодействий.

Другие советы

Контейнеры IoC фокусируются на тех вещах, которые вы знаете, т.е.Я знаю, что буду использовать один регистратор в модульном тестировании и другой регистратор в своем приложении.MEF фокусируется на тех вещах, которых у вас нет, в моей системе может появиться от 1 до n регистраторов.

Скотт Хансельман и я более подробно рассмотрели эту тему в недавних hanselminutes.

http://www.hanselminutes.com/default.aspx?showID=166

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top