MEF не поддерживает изоляцию AppDomain, поэтому, к сожалению, даже во время перекомпоновки те ранее загруженные сборки все еще загружаются в основное веб-приложение AppDomain.Есть две вещи, с которыми вам нужно бороться в ASP.NET:
Любые изменения в физических файлах (например, .aspx, .cshtml и т. Д.) Или любые изменения в файлах конфигурации (.config) или любые изменения в каталоге \ bin приведут к перезапуску приложения.Это связано с двумя вещами: мониторингом файлов на страницах / конфигах и мониторингом файлов в каталоге \ bin (потому что по умолчанию ASP.NET использует теневое копирование файлов - это рекомендуется).
Чтобы использовать MEF в другом домене приложений, потребовалось бы ужасное количество междоменных связей, либо через сериализацию, либо MarshalByRef
, что я просто не думаю, что когда-либо будет чистой реализацией.Не уверен, как бы вы вызвали BuildProvider
экземпляров, используемых для динамической компиляции ваших страниц в другом домене приложений.
Мне интересно, думаете ли вы об этом слишком много.Поскольку IIS6, HTTP.SYS управлял маршрутизацией входящих запросов на соответствующий веб-сайт, это обрабатывается на уровне ядра.Даже если основное приложение действительно перезапустится (что может быть по разным причинам), никакие запросы не будут отброшены, оно просто поставит в очередь ожидание нового рабочего процесса перед передачей запроса.Конечно, с точки зрения пользователя, они могут заметить некоторое время простоя, ожидающее перезапуска нового приложения, но реально, как часто вы собираетесь вносить эти изменения?
Многие дизайны приложений страдают отнад-инжиниринг.Возможно, вы захотите разработать для каждого сценария, но реально проще поддерживать систему, которая является простой, но расширяемой.По моему мнению, желание сделать то, что вы указали, было бы классифицировано как чрезмерное проектирование.Сохраняйте это простым.