全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么使用ActivatorUtilities .NET DI容器高级用法

ActivatorUtilities 是 .NET 内置轻量级对象创建辅助类,用于无完整 DI 上下文时按需解析依赖构造对象,适用于中间件、策略等局部注入场景,支持工厂预编译与临时实例创建,但不管理生命周期。

ActivatorUtilities 是 .NET 内置的轻量级对象创建辅助类,它不替代 IServiceProvider,而是**在没有完整 DI 容器上下文时,按需解析依赖并构造对象**。它常用于中间件、策略、工厂等需要“局部依赖注入”的场景,是 .NET DI 生态中被低估但非常实用的高级工具。

用 ActivatorUtilities.CreateFactory 创建可复用的工厂

当你需要多次创建同一类型(比如每次 HTTP 请求都 new 一个策略实例),又不想每次都走 GetService(),可以用 CreateFactory 预编译构造逻辑:

  • 返回的是 Func,性能高,支持缓存
  • 自动识别构造函数参数,支持带服务、常量、委托等混合注入
  • 适合注册到 DI 容器中作为工厂方法,或在中间件中复用

示例:

var factory = ActivatorUtilities.CreateFactory(new[] { typeof(IConfiguration) });
var service = factory(provider, configuration); // provider 是 IServiceProvider

用 ActivatorUtilities.CreateInstance 按需构造临时对象

适用于“一次性的、非托管生命周期”的对象创建,比如在 Action 中动态构建验证器、映射器:

  • 不需要类型提前注册到 DI 容器(但其依赖必须已注册)
  • 支持传入部分参数(如字符串、int),其余由 DI 自动解析
  • 比直接 new 更灵活,比 Resolve 更轻量

示例:

var validator = ActivatorUtilities.CreateInstance(serviceProvider, orderType: typeof(ProductOrder));

配合 ServiceProviderServiceExtensions 扩展自定义服务解析逻辑

你可以给 IServiceProvider 添加扩展方法,把 ActivatorUtilities 封装成更语义化的 API:

  • 例如 provider.CreateScopedInstance(args...),内部调用 CreateInstance 并确保作用域正确
  • 可用于统一处理“带上下文参数 + 依赖注入”的构造场景
  • 避免在业务代码里反复写冗长的 ActivatorUtilities 调用

注意事项和常见陷阱

ActivatorUtilities 强大但有边界,用错容易引发问题:

  • 不管理对象生命周期:创建出来的实例不会被 DI 容器跟踪,Dispose、Scope 释放等需手动处理
  • 构造函数必须是 public,且不能有歧义(多个重载构造函数需显式指定)
  • 如果依赖未注册,异常信息不如 GetRequiredService 友好,建议加 try/catch 或预检
  • 在 Razor Pages 或 MVC 的 @inject 场景中一般不需要它——直接用构造函数注入更清晰

基本上就这些。ActivatorUtilities 不是黑魔法,它是 DI 容器能力的自然延伸,用对了能让代码更松耦合、更易测试,也更贴近 .NET 原生设计哲学。


# 工具  # c#  # 作用域  # .net  # red  # mvc  # 中间件  # 常量  # 封装  # 构造函数  # try  # catch  # 字符串  # int  # public  # 委托  # var  # 对象  # typeof  # http  # 不需要  # 按需  # 适用于  # 复用  # 的是  # 你可以  # 多个  # 可以用  # 当你  # 它是 


相关文章: 如何选择高性价比服务器搭建个人网站?  建站主机空间推荐 高性价比配置与快速部署方案解析  如何挑选最适合建站的高性能VPS主机?  如何设计高效校园网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何在腾讯云服务器快速搭建个人网站?  制作企业网站建设方案,怎样建设一个公司网站?  建站主机如何选?高性价比方案全解析  如何用景安虚拟主机手机版绑定域名建站?  如何挑选优质建站一级代理提升网站排名?  如何确保西部建站助手FTP传输的安全性?  如何配置支付宝与微信支付功能?  制作网页的网站有哪些,电脑上怎么做网页?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何通过FTP空间快速搭建安全高效网站?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  C++时间戳转换成日期时间的步骤和示例代码  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机选哪种环境更利于SEO优化?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  金*站制作公司有哪些,金华教育集团官网?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  宝塔建站助手安装配置与建站模板使用全流程解析  深圳网站制作案例,网页的相关名词有哪些?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  家庭服务器如何搭建个人网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何批量查询域名的建站时间记录?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站之星后台管理如何实现高效配置?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  深圳网站制作的公司有哪些,dido官方网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何快速搭建高效WAP手机网站?  如何快速上传自定义模板至建站之星?  如何通过二级域名建站提升品牌影响力?  建站之星导航菜单设置与功能模块配置全攻略  如何规划企业建站流程的关键步骤?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何制作算命网站,怎么注册算命网站?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何选择适合PHP云建站的开源框架?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站之星安装后如何自定义网站颜色与字体?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何快速搭建虚拟主机网站?新手必看指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。