Почему точно не MEF контейнер DI/IoC?

В блогосфере и самих Microsoft говорилось, что MEF не является другим контейнером IoC.

ОК... но почему? Мне кажется то же самое. Может быть, это не так хорошо, как Unity или Castle Windsor, но он по-прежнему подходит для определения, не так ли?

Почему MEF не является контейнером IoC, например Unity или Castle Windsor?

Ответ 1

MEF имеет потенциал, но в качестве контейнера DI ему не хватает:

  • Код как конфигурация
  • Автоматическая регистрация
  • Конфигурация XML (не так важна для меня)
  • Пользовательские сроки жизни
  • Перехват

Эти вещи очень важны.

Для образа жизни ему не хватает:

  • За графом
  • Контекст веб-запроса
  • Контекст темы
  • Контекст сеанса
  • Объединенный
  • Область действия
  • Пользовательская ссылка

Ссылки: - Книга Марка Зеемана "Инъекция зависимостей в .NET"

Ответ 2

В моем мире DI основан на трех измерениях: компоновке объектов, управлении жизненным циклом и перехвате. Это то, что облегчает использование других полноразмерных контейнеров DI, таких как Unity, Castle Windsor и Ninject. MEF поддерживает только одно измерение, Object Composition. Он делает это довольно хорошо, но оставшиеся два измерения не поддерживаются в MEF.