Модульная функциональность с ASP.NET vNext Core CLR

В ASP.NET 4.5 можно использовать Assembly.Load() или AppDomain.CurrentDomain.Load() для динамической загрузки сборки во время выполнения. Это можно использовать для добавления новых функций в работающее веб-приложение в форме модулей без необходимости перестраивать или даже перезапускать приложение.

Я хотел бы знать, как это можно сделать с помощью нового ASP.NET vNext (5.0?), Предназначенного для платформы Core. Я знаю, что это можно сделать с полной структурой, так как System.AppDomain доступен вместе с перегруженным Assembly.Load(). Когда я переключаюсь на базовую платформу Core, у меня больше нет System.AppDomain, и Assembly.Load() становится ограниченным.

Есть ли способ получить эту динамическую модульную функциональность в платформе ASP.NET 5.0 Core?

Ответ 1

Я не уверен, что будет хорошим ответом, потому что Asp.Net 5 такой новый и не имеет много полной документации.

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

Глядя на источник, есть интерфейс IAssemblyLoadContext, который позволит вам получить сборку. Существует также IAssemblyLoader.

Они используются хостом "kre", который является основным компонентом Asp.Net 5, который в основном стимулирует ваше приложение. Таким образом, вам нужно добавить свой IAssemblyLoader к базовому хосту, чтобы kre.

К сожалению, я пока не вижу очень много точек расширения в коде. Будем ли мы получать эти точки расширения? Я не знаю. Вы можете зарегистрировать проблему на странице github. Также возможно, что есть точка расширения, которую я сейчас не вижу.

Если вернуться к вопросу, можете ли вы добавить такую расширяемость в Asp.Net 5 Core? Да, вы можете создать свой собственный хост, похожий на хост по умолчанию, который затем будет включать ваш собственный загрузчик, а затем запустить ваше приложение с этим.

Ответ 2

Вы можете попробовать ExtCore framework

Это позволяет иметь модульные и расширяемые приложения ASP.NET 5 из коробки.

Короче говоря

  1. Это позволяет использовать как модули из dll, так и из пакетов nuget одновременно.
  2. Это позволяет всем модулям работать с хранилищем в едином контексте и иметь свои собственные модели и репозитории.
  3. Каждое расширение может иметь контроллеры, представления, статический контент и т.д.