You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core:如何创建新作用域IServiceProvider支持运行时插件

Asp.Net Core运行时插件加载方案探索

目标

创建基于Asp.Net Core的解决方案,支持在IServiceCollection/IServiceProvider锁定后,仍能在运行时加载插件。

核心问题

IServiceCollection在启动阶段完成配置,据此生成IServiceProvider,二者在程序运行前都会被锁定,无法再进行修改。

已尝试的解决方案

  • 使用Autofac子容器:创建ILifetimeScope添加服务,通过自定义IControllerActivator激活控制器,但无法使用AddDbContext等标准扩展方法。
  • 克隆原始IServiceCollection:加载插件时克隆集合并添加新服务,可使用标准扩展,但DbContext无法按请求正确释放。
  • 每次请求创建新IServiceProvider:内存持续增长,资源未正确释放。
  • 复用插件IServiceProvider并创建作用域:在自定义IControllerActivator中创建作用域尝试释放资源,但内存仍未回落。
  • 目前无可行方案,寻求内存安全的实现方式。

背景疑问

  • 默认IServiceProvider是否没有父子容器概念?
  • IServiceScopeFactory生成的请求级IServiceProvider是否依赖父容器?
  • 相关中间件如何处理资源释放?
  • 替换中间件是否可行?

内容的提问来源于stack exchange,提问作者Sky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:01:00