Модульная функциональность с 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 из коробки.
Короче говоря
-
Это позволяет использовать как модули из dll, так и из пакетов nuget одновременно.
- Это позволяет всем модулям работать с хранилищем в едином контексте и иметь свои собственные модели и репозитории.
- Каждое расширение может иметь контроллеры, представления, статический контент и т.д.