Скотт Хансельман помог выделить особенности MEF в своем подкасте 148 с Гленном Блоком.
По сравнению с OSGi, MEF построен на «инверсии управления», а OSGi - нет: он (OSGi) обнаружит новый пакет через другой механизм, основанный на уровне жизненного цикла.
MEF ориентирован на расширяемость приложения. Он использует DI в качестве стратегии для создания различных расширений, , однако сам по себе он не является универсальным контейнером DI .
Поскольку последний пункт может сбивать с толку, расшифровка подкаста может помочь:
Хотя я в основном позиционирую его, различие между ними заключается в том, что контейнеры IoC на самом деле предназначены для управления известным набором вещей в разных средах, например, я хочу использовать регистратор в моей дисковой среде Я хочу макет журнала в моей тестовой среде.
Таким образом, MEF на самом деле предназначен для управления неизвестным набором вещей и что сводится к тому, что в контейнере IoC я склонен делать либо механизм на основе соглашения, либо регистрацию, специальный механизм регистрации, чтобы скажем вот что означает логгер, вот что это значит, вот что это значит.
MEF использует код и механизм обнаружения и аннотации к коду, которые
атрибуты, где бы то ни было в системе, это то, что есть.
Итак, снова поднимая его на более высокий уровень, вы используете MEF для реального управления набором неизвестных вещей, вы используете IoC Containers для управления набором известных вещей.
Вывод: (одно из) основное отличие заключается в принципе обнаружения (IoC и жизненный цикл)