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

ASP.NET Core中AddSingleton的工厂方法是否保证仅执行一次?

结论

你提到的官方.NET自带依赖注入容器的AddSingleton工厂重载,传入的工厂方法会被保证仅执行一次,即使存在高并发获取服务的场景也不会出现多次执行的情况。

具体说明

  • 官方Microsoft.Extensions.DependencyInjection的单例服务初始化逻辑内部内置了锁机制:当第一个请求触发单例服务创建时,会锁定初始化流程,工厂方法只会在这个流程中执行一次,执行完成后生成的实例会被缓存到容器中,后续所有请求不管是并发还是串行,都会直接拿到缓存的实例,不会再触发工厂调用。
  • 上述规则仅针对微软官方默认DI容器实现,如果你的项目替换了Autofac、Castle Windsor等第三方DI容器,需要参考对应容器的官方文档确认实现规则。

你提到的重载方法签名如下:

public static IServiceCollection AddSingleton<TService>( this IServiceCollection services, Func<IServiceProvider, TService> implementationFactory) where TService : class

注意不要和瞬时/作用域服务的工厂重载混淆:AddTransient的工厂每次获取服务都会执行,AddScoped的工厂每个请求作用域会执行一次,只有AddSingleton的工厂全局仅执行一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:00:03