Новый проект Prism - использовать MEF или Unity? - PullRequest
14 голосов
/ 26 октября 2010

Я начинаю новый личный проект Prism 4. Эталонная реализация в настоящее время использует Unity.

Я хотел бы знать, должен ли я вместо этого использовать MEF или просто придерживаться Unity.

Я знаю, что в нескольких дискуссиях упоминалось, что эти два понятия разные, и они перекрываются, но я пропущу, если просто выберу Unity полностью?

Ответы [ 3 ]

23 голосов
/ 30 ноября 2010

Также ознакомьтесь с документацией :

Ключевое решение: выбор контейнера внедрения зависимостей

Библиотека Prism предоставляет два варианта для контейнеров внедрения зависимостей: Unityили MEF.Prism является расширяемой, что позволяет использовать другие контейнеры вместо небольшого количества работы.И Unity, и MEF предоставляют одинаковую базовую функциональность для внедрения зависимостей, хотя они работают по-разному.

Некоторые возможности, предоставляемые обоими контейнерами, включают следующее:

  • Они оба регистрируют типы в контейнере.
  • Они оба регистрируют экземпляры с помощьюконтейнер.
  • Они оба обязательно создают экземпляры зарегистрированных типов.
  • Они оба вводят экземпляры зарегистрированных типов в конструкторы.
  • Они оба вводят экземпляры зарегистрированных типов в свойства.
  • Оба имеют декларативные атрибуты для маркировки типов и зависимостей, которыми необходимо управлять.
  • Они оба разрешают зависимости в графе объектов.

Unity предоставляет несколько возможностей, которыеMEF не:

  • Разрешает конкретные типы без регистрации.
  • Разрешает открытые обобщения.
  • Он использует перехват для захвата вызовов объектов и добавления дополнительных функций кцелевой объект.

MEF предоставляет несколько возможностей, которых нет в Unity:

  • Обнаруживает сборки в каталоге.
  • Он использует загрузку файлов XAP и обнаружение сборок.
  • Он перекомпоновывает свойства и коллекции при обнаружении новых типов.
  • Он автоматически экспортирует производные типы.
  • Он развертывается с помощью .NET Framework.
7 голосов
/ 27 октября 2010

Я сейчас занимаюсь тем же расследованием.Я был на прошлой неделе на симпозиуме P & P в Редмонде.У меня была возможность пообщаться с некоторыми людьми из P & P по этому вопросу.

MEF

+ Часть .net, нет необходимости в дополнительных библиотеках

+ Очень мощный в сценариях расширяемости, модульности

- Более общий подход, менее гибкий для сценариев DI

- Вам нужно украсить атрибутами, ваш код приклеен к MEF

Unity

+ Очень гибкий для сценариев DI

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

- Нет встроенной поддержки сценариев расширения, модульности

- Необходимы для развертывания библиотек третьих сторон

Я думаю, что хорошей идеей является использование MEF для расширяемости (управление модулями вашего приложения, локализация регистраций) и использование Unity для DI.

0 голосов
/ 07 сентября 2012

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

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

...