MEF (управляемая структура расширяемости) против IoC / DI - PullRequest
55 голосов
/ 20 сентября 2008

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

Ответы [ 3 ]

53 голосов
/ 26 сентября 2008

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

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

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

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

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

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

26 голосов
/ 16 октября 2008

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

11 голосов
/ 01 февраля 2009

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

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

...