Основной целью MEF является расширяемость; служить в качестве инфраструктуры подключаемых модулей, когда автор приложения и автор подключаемого модуля ( расширение ) различны и не имеют особых знаний друг о друге за пределами опубликованного интерфейса ( договор ) библиотека.
Другой проблемой пространства адресов MEF, которая отличается от обычных подозреваемых IoC, и одной из сильных сторон MEF является обнаружение [расширения]. Он имеет множество расширяемых механизмов обнаружения, которые работают с метаданными, которые можно связать с расширениями. С сайта MEF CodePlex:
"MEF позволяет помечать расширения дополнительными метаданными, что облегчает расширенные запросы и фильтрацию"
В сочетании со способностью задерживать загрузку помеченных расширений, возможность запрашивать метаданные расширения до загрузки открывает дверь для множества интересных сценариев и существенно расширяет возможности, такие как версионность [плагина] ,
MEF также имеет «Контрактные адаптеры», которые позволяют «адаптировать» или «преобразовывать» расширения ( от типа> к типу ) с полным контролем над деталями этих преобразований. Адаптеры контрактов открывают еще один творческий фронт относительно того, что означает и подразумевает «открытие».
Опять же, намерение MEF сосредоточено на анонимной расширяемости подключаемого модуля, что сильно отличает его от других контейнеров IoC. Таким образом, хотя MEF можно использовать для композиции, это всего лишь небольшое пересечение его возможностей по сравнению с другими IoC, и я подозреваю, что в будущем мы увидим множество кровосмесительных взаимодействий.