Меня интересуют способы контроля объема композиции с помощью MEF.
Самый очевидный пример - веб-приложения, где вы должны создавать определенное подмножество компонентов для каждого запроса и распоряжаться ими по завершении запроса.
Однако общая реализация области видимости может быть полезна и в других контекстах.
Я смотрю предварительный просмотр MEF2 и пытаюсь понять его, но почему-то не вижу полного решения.
С одной стороны, есть этот модуль интеграции MVC , где MEF достаточно хорош, чтобы позаботиться о объеме запроса для меня, но это не очень удобно вне MVC (и вне сети для этого имеет значение), это?
С другой стороны, в первом посте, связанном с предварительным просмотром " Что нового в MEF2 ", я видел вещь под названием CompositionScopeDefinition
, которая выглядит как явная спецификация для областей, но с этим Во-первых, я не вижу способа «закрыть» прицел. Другими словами: как MEF определяет, когда утилизировать компоненты, созданные в области действия?
И с другой стороны (да :-), с MEF v1, я имел обыкновение иметь дело с областью видимости, создавая вложенные CompositionContainer
s, но это не очень хорошо работает с пользовательскими ExportProvider
s.
Что бы действительно хотелось увидеть, это что-то вроде:
using( var scope = compositionContainer.OpenScope( /* some scope definition here */ ) )
{
var rootComponent = scope.GetExport<MyRootComponent>(); // The component graph gets composed at this point
rootComponent.DoYourScopedThing();
} // The component graph gets disposed at this point
Если бы у меня была эта вещь, я мог бы легко построить интеграцию MVC поверх нее, но я мог бы также использовать ее в других контекстах.
Итак, еще раз вопрос: что вы используете для решения подобных задач? Или вы говорите, что MEF еще недостаточно зрел для серьезного использования?