2008-09-20 5 views

ответ

53

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

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

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

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

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

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

+14

У вас есть отличный выбор слов. – 2011-04-14 04:01:40

26

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