Безопасность потоков и MEF CompositionContainer - PullRequest
4 голосов
/ 14 июля 2010

Я планирую использовать MEF в ASP.NET, чтобы узнать о безопасности потоков в CompositionContainer.

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

Я также рассмотрел гибридный подход, в котором я мог бы использовать потокобезопасный статический CompositionContainer и тот, который привязан к каждому запросу.

Помимо аргумента безопасности потока, я сильно полагаюсь на ExportFactory, чтобы иметь возможность создавать объекты по мере необходимости. Хотя эта штука ExportLifeTimeContext меня все еще беспокоит, и я неуверен в ресурсных требованиях этого подхода.

Кто-нибудь получил некоторое представление об этом?

1 Ответ

5 голосов
/ 15 июля 2010

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

Следует помнить, что даже "Потоко-безопасные »контейнеры композиции не являются поточно-ориентированными для операций, которые могут вызывать перекомпоновку, например, изменения в каталогах или вызов методов Compose для контейнера.

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

...