Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как выбрать между MEF и любым контейнером IoC?

Автор вопроса: Jeevan BhattОтветов: 4

В каком сценарии мы должны использовать? Как определиться с выбором? И при каких обстоятельствах мы бы решили использовать и то, и другое вместе?

Я ранее работал с Unity Container (unity-container).

  • Возможный дубликат MEF по сравнению с любым IoC Palec 19.05.2019

wpfioc-containerunity-containermef

Ответы

Ответ 1 · рейтинг 12 · marc_s

Сложный вопрос - поскольку они действительно частично совпадают.

Я бы сказал так:

  • используйте любой полезный IoC, если вас в первую очередь беспокоит внедрение зависимостей ради разделения компонентов, например за возможность вместо этого ввести макет (для тестирования)

  • используйте MEF, особенно если вам больше нравится расширяемость, например иметь возможность "загружать все сборки из этого каталога, которые экспортируют определенный интерфейс", и если вам нужно быть расширяемым и открытым для третьих лиц (например, Visual Studio: предложить общедоступный API, чтобы другие могли написать расширение для вашего приложения). Вот где действительно сияет MEF

Для MEF и Unity также существует уровень интеграции MEF и Unity объединить сильные стороны обоих инструментов вместе.

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

Ответ 2 · рейтинг 1 · Ian Ringrose

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

Поэтому я бы сказал, что IoC, если все скомпилировано как часть одной и той же системы сборки, и MEF, если вам нужно справиться с надстройками, вы не можете перекомпилировать самостоятельно.

Ответ 3 · рейтинг 1 · Wim Coenen

Глен Блок (бывший менеджер по продукту MEF) довольно хорошо осветил это в своем блоге:

  • Следует ли мне использовать MEF для общих нужд IoC?
  • Следует ли использовать MEF с контейнером IoC? - Часть 1

Ответ 4 · Michael Shimmins

Я слышал прекрасное объяснение этого (извиняюсь перед автором, я забыл, кто это был): на очень высоком уровне IoC хорош, когда вам нужно что-то одно для данного интерфейса, MEF хорош, когда вам нужно все из заданного интерфейса.

Например, в IoC вы хотите вернуть конкретный единственный конкретный класс для интерфейса:

For<ICarFactory>().Use<CarFactory>();

Когда бы вы ни захотели использовать ICanFactory, вы получите CarFactory.

MEF хорош тем, что говорит: дай мне все автозаводы:

CheapCarFactory : ICarFactory
FamilyCarFactory : ICarFactory
LuxuryCarFactory : ICarFactory

И Т. Д.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы