Можно ли использовать MEF на asp.net для внедрения зависимостей? - PullRequest
6 голосов
/ 26 февраля 2011

Я знаю, что такое Dependency Injection, но я еще никогда не использовал Dependency Injection ни в одном из своих проектов. Так что считайте меня нубом DI.

Простой вопрос: Может ли MEF использоваться для внедрения зависимости?

Если это возможно, мой следующий вопрос: Хорошая ли идея использовать MEF для внедрения зависимостей?

Я понимаю, что мой последующий вопрос может рассматриваться как субъективный. Но я ищу лучшие практики и причины за и против. Итак, я надеюсь, что мой следующий вопрос не будет шуметь слишком много перьев.

В контексте всего этого я чувствую себя немного растерянным, пытаясь выяснить, как создать плагин для платформы asp.net mvc.

Ответы [ 3 ]

8 голосов
/ 26 февраля 2011

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

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

1 голос
/ 26 февраля 2011

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

Большинство недостатков MEF, упомянутых в его посте, были устранены MEFContrib : он содержит дополнительные реализации каталога и поставщика экспорта для добавления поддержки POCO, открытых обобщений и перехвата.

обновление : недавно выпущенный MEF2 Preview3 добавляет поддержку открытых обобщений и регистрацию без атрибутов из коробки. API предварительных версий не являются окончательными, но это хороший признак того, что эти функции будут в следующей (> v4.0) версии .NET.

1 голос
/ 26 февраля 2011

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

Там, где я работаю, используя ASP.NET MVC2, мы используем Castle Windsor для внедрения зависимостей.Затем мы используем конфигурацию XML для инициализации контейнера.Это означает, что мы можем вводить различные типы для интерфейса без необходимости перестраивать.

Я считаю, что .NET предлагает еще одну опцию для MEF, также называемую MAF.Это должно быть более сложным, но предложить гораздо больше контроля.Однако я ничего больше не знаю об этом.

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

...