0

0

ASP.NET Core 中的应用程序部件如何动态加载?

小老鼠

小老鼠

发布时间:2025-10-12 11:06:01

|

803人浏览过

|

来源于php中文网

原创

通过AssemblyLoadContext实现运行时动态加载程序集,结合ApplicationParts注册控制器与服务,并利用IViewLocationExpander支持Razor视图扩展,使用Collectible AssemblyLoadContext管理插件生命周期,实现ASP.NET Core的模块化架构。

asp.net core 中的应用程序部件如何动态加载?

在 ASP.NET Core 中实现应用程序部件的动态加载,通常指的是在运行时加载程序集(如控制器、Razor 页面、视图或服务),而不需要在编译时静态引用。虽然 ASP.NET Core 本身不直接提供“插件式”架构,但可以通过一些机制来实现动态加载功能。

使用 AssemblyLoadContext 动态加载程序集

你可以通过继承 AssemblyLoadContext 来创建自定义上下文,用于加载外部的程序集(例如从磁盘或网络):

  • 将插件 DLL 放置在应用目录外的指定文件夹中
  • 使用 AssemblyLoadContext.Default.LoadFromAssemblyPath() 或自定义上下文加载
  • 加载后可通过反射查找类型并注册到依赖注入容器

示例代码片段:

var assemblyPath = Path.Combine(pluginFolder, "MyPlugin.dll");
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath);

动态注册控制器和服务

加载程序集后,需要让 ASP.NET Core 知道其中包含的控制器:

  • Program.cs 或启动类中,使用 MvcBuilderPartManager 添加应用模型
  • 调用 builder.Services.AddControllers().PartManager.ApplicationParts.Add(...)
  • 扫描程序集中的控制器类型,并将其添加到应用部件集合

示例:

多个微信小程序源码合集
多个微信小程序源码合集

微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要应用于移动端,旨在提供便捷的用户体验,无需下载安装即可在微信内使用。本压缩包包含了丰富的源码资源,涵盖了多个领域的应用场景,下面将逐一介绍其中涉及的知识点。1. 图片展示:这部分源码可能涉及了微信小程序中的``组件的使用,用于显示图片,以及`wx.getSystemInfo`接口获取屏幕尺寸,实现图片的适配和响应式布局。可能还包括了图片懒加

下载
builder.Services.AddControllers()
    .ConfigureApplicationPartManager(manager =>
    {
        var part = new AssemblyPart(assembly);
        manager.ApplicationParts.Add(part);
    });

动态加载 Razor 视图或页面(可选)

如果插件包含 Razor 视图或 Pages,需配置视图位置扩展器:

  • 实现 IViewLocationExpander 来支持自定义视图路径
  • 使用 RazorViewEngineOptions 添加额外的视图搜索路径
  • 或使用预编译视图(Razor 类库)并确保其被正确引用

热更新与卸载注意事项

.NET 默认的 AssemblyLoadContext 不支持卸载,除非使用 Collectible AssemblyLoadContext

  • 创建可收集的上下文以允许后期卸载插件
  • 设置 isCollectible: true
  • 注意:无法卸载正在使用的程序集,需谨慎管理生命周期

基本上就这些。ASP.NET Core 的动态加载依赖于程序集加载、应用部件管理和依赖注入的配合。虽然比传统插件系统复杂,但在微服务或模块化系统中非常实用。关键是控制好加载路径、类型发现和生命周期管理。

相关专题

更多
default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

52

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

54

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

15

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

125

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

138

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 48.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号