Ответ 1
Основной целью MEF является расширяемость; чтобы служить в качестве "плагинов" для того, когда автор приложения и автор плагина (расширения) отличаются друг от друга и не имеют особых знаний друг о друге за пределами опубликованной библиотеки интерфейса (контракта).
Другое проблемное пространство MEF обращается к тому, что отличается от обычных подозреваемых IoC и одной из сильных сторон MEF, является [расширение]. У этого есть много, хорошо, расширяемых механизмов обнаружения, которые работают с метаданными, которые вы можете связать с расширениями. На сайте MEF CodePlex:
"MEF позволяет расширять теги с добавочными метаданными, что облегчает запросы и фильтрацию"
В сочетании с возможностью добавления тегов с задержкой при загрузке, возможность опроса метаданных расширения до загрузки открывает дверь для множества интересных сценариев и, по существу, позволяет такие возможности, как [plug-in] управление версиями.
MEF также имеет "Контрактные адаптеры", которые позволяют "адаптировать" или "преобразовать" расширения (от типa > к типу) с полным контролем над деталями этих преобразований. Контрактные адаптеры открывают еще один креативный фронт относительно того, что означает "открытие" и подразумевает.
Опять же, намерение MEFs тесно связано с анонимной расширяемой расширяемостью, что очень сильно отличает ее от других контейнеров IoC. Поэтому, хотя MEF можно использовать для композиции, это просто небольшое пересечение его возможностей по сравнению с другими IoC, с которыми я подозреваю, что мы увидим много кровосмесительного взаимодействия в будущем.