Я использую Контейнер WindCor IoC для своего веб-приложения для разрешения реализации уровня доступа к данным, которое приложение должно использовать.MEF: Где я должен поставить CompositionContainer?
Пользовательский интерфейс веб-приложения будет состоять из страниц, и каждая страница состоит из небольших единиц, называемых портлетами. (Их концепция несколько похожа на виджетов.) Эти так называемые портлеты - это в основном веб-элементы управления и могут быть настроены во время выполнения для каждой страницы.
Приложение будет поставляться с некоторыми из этих встроенных модулей, но я бы хотел включить его легко.
Я понял, что этот механизм является именно тем, для чего создан MEF. Поэтому я решил реализовать систему таким образом, чтобы она открывала портлеты с использованием MEF. Затем я понял, что он также может делать то, что я сейчас использую для Windsor, поэтому я решил сорвать Windsor в пользу MEF.
Очевидно, что мне придется использовать DirectoryCatalog, который сканирует DLL-файлы в папке bin приложения и возвращает все, что мне нужно.
Я прочитал несколько руководств, примеров и все вопросы относительно MEF в StackOverflow. Я полагал, что самый простой способ использовать MEF - через PartInitializer, который Гленн Блок упомянул в своих учебниках, но я понял, что это не в MEF. Фактически, он находится в коде, который я загрузил из CodePlex, но в отдельной сборке и только в источнике, а не в двоичной форме. (Значит ли это, что это не входит в MEF? Или в чем смысл приложить его к отдельному проекту?) Затем я понял, что это для Silverlight, поэтому мне это действительно не помогает. (Или я должен просто скомпилировать это против .NET 3.5 или включить его в свой проект, и мне хорошо идти?)
Итак, теперь у меня есть проблема, которая заключается в следующем: где я должен поместить CompositionContainer в моей заявке?
Есть еще одна вещь, которую я хотел бы рассмотреть: следует ли использовать только один CompositionContainer за всю жизнь приложения, или мне лучше создавать контейнер для каждого раза, когда он мне нужен?