Новый проект призмы - используйте 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