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

Разница между контейнерами MEF и IoC (например, Unity, Autofac, SMap, Ninject, Windsor.Spring.net и т.д.)

Я искал инъекцию зависимостей и читал несколько статей. Но все же я не могу узнать разницу между MEF и другими IoC. Итак, мой вопрос таков: в какой ситуации я должен использовать контейнер MEF или IoC?

Почему полезно использовать MEF с PRISM для (WPF и Silverlight) или для настольных приложений?

В то время как в веб-приложении люди используют контейнеры IoC.

Итак, каковы критерии для определения того, какой метод зависимости я должен использовать?

Я прошел через статью http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx, но я ничего не мог понять.

4b9b3361

Ответ 1

В конечном итоге то, что я заключил о контейнере MEF vs IoC, выглядит следующим образом:

MEF предпочтительнее использовать, когда приходится иметь дело с неизвестными типами или с архитектурой на основе плагинов.

IoC контейнеры предпочтительнее использовать с известными типами.

Кроме того, MEF является архитектурным решением для инъекций зависимостей

В то время как контейнеры IoC представляют собой решения уровня кода для инъекций зависимостей.

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

MEF имеет две компоненты:

  • Каталог: отвечает за обнаружение расширения

  • Контейнер: обеспечивает возможность загрузки расширения на выполнение приложение

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

Я ожидаю, что больше людей прокомментируют это.

Ответ 2

IoC - это архитектурная стратегия проектирования, а MEF - реализация инъекции зависимости шаблона проектирования. Инъекционная инъекция (DI) часто является стратегией реализации IoC. Часто используется термин контейнер IoC, предполагающий, что IoC является техникой.

Нет, иначе. IoC - это широкая концепция, а DI - шаблон проектирования для реализации ядра IoC. MEF - это некоторая форма DI, но у нее нет всех основных особенностей IoC.

MEF использует состав, чтобы выяснить зависимости, которые он должен решить. Это похоже на множество других контейнеров IoC, например Pico и Spring. Но он останавливается. Я не видел управления жизненным циклом и не собирал конфигурацию. Последние два я считаю фундаментальной частью IoC (а не DI), потому что производительность вызывающего абонента не должна страдать из-за потребления памяти, используемого вызываемым пользователем.

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

Тип приложения не должен зависеть от выбора шаблона проектирования. Между рабочим столом или веб-приложением нет большой разницы. Оба являются пользовательскими интерфейсами, и оба должны иметь возможность использовать MEF и IoC. Если функциональность проста и не нуждается в перекрестке границ оптимизации (например, вызовы базы данных), тогда MEF является первым выбором, потому что это фреймворк, который присутствует при использовании .NET 4. Тогда это может быть полезно, но если вызов пересекает границу оптимизации (например, синтаксический анализ или загрузка файла), тогда использование контейнера IoC более плодотворно для производительности и обслуживания.

Информация, которую я использовал: