Новый проект призмы - используйте MEF или Unity?

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

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

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

Ответы

Ответ 1

Также проверьте документацию:

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

Библиотека Призмы предоставляет два варианта для контейнеров для инъекций зависимости: Единство или MEF. Призма расширяема, тем самым позволяя другим контейнерам вместо этого следует использовать немного Работа. Оба Unity и MEF обеспечивают такая же базовая функциональность для инъекции зависимостей, хотя они работают совсем по-другому.

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

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

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

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

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

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

Ответ 2

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

MEF

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

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

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

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

Единство

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

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

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

-Поддерживать развертывание библиотек 3rdparty

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

Ответ 3

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

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