Ответ 1
Скотт Гензельм помог выделить особенности MEF в своем подкасте 148 с Glenn Block.По сравнению с OSGi, MEF построен на основе "Inversion of Control" и OSGi: он (OSGi) обнаружит новый пакет через другой механизм, основанный на жизненном цикле.
MEF фокусируется на расширяемости приложения. Он использует DI как стратегию для составления разных расширений, однако сам по себе он не является общим контейнером DI.
Поскольку последняя точка может сбить с толку, transcripts подкаста может помочь:
То, как я в основном позиционирую его, но разница между этими двумя, заключается в том, что контейнеры IoC действительно управляют известным набором вещей в разных средах, например, я хочу, чтобы в моем дисковой среде был логгер, я хочу, чтобы mock logger моя тестовая среда.
Итак, MEF действительно занимается управлением неизвестным набором вещей, и то, что это сводится к тому, что в контейнере IoC я, как правило, делаю какой-либо условный или регистрационный механизм регистрации, чтобы сказать здесь, что означает журнал, вот что это значит, вот что это значит.
MEF использует код и механизм обнаружения и аннотации кода, которые являются атрибуты, где все, что появляется в системе, что есть.
Итак, перейдя на более высокий уровень, вы о том, что используете MEF для управления множеством неизвестных вещей, вы используете IoC Containers для управления набором известных вещей.
Заключение: (одно из) основное отличие - принцип открытия (IoC против жизненного цикла)