Подтвердить что ты не робот

MEF (Managed Extensibility Framework) против IoC/DI

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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