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

C#/.NET 5下ConcurrentDictionary缓存应注册为Singleton还是Transient?

答复

你的理解完全正确,这个自定义缓存类应当注册为Singleton,而非Transient。

  • 依赖注入容器中Transient生命周期的核心规则是:每一次请求获取该类型实例时,都会创建一个全新对象。如果把这个缓存类注册为Transient,每次注入、每次请求拿到的实例都持有独立的ConcurrentDictionary,不仅不同请求的缓存数据无法共享,请求结束后实例被回收,所有缓存内容都会直接清空,你设置的30分钟全局缓存有效期完全没有作用。
  • Singleton生命周期的服务在整个应用运行周期内仅创建一次,所有请求共享同一个实例,内部的ConcurrentDictionary会持续保留,缓存的读写、过期逻辑才能正常生效。

注意事项

  • 你选用ConcurrentDictionary作为存储已经满足了多线程读写的线程安全要求,如果你自己实现了过期缓存的后台清理逻辑,需要额外注意清理操作的并发安全,避免出现异常。
  • 注册为Singleton后要注意生命周期匹配问题:不要直接在Singleton服务中注入Scoped类型的依赖,如果确实需要使用Scoped服务,可以在对应逻辑执行时手动创建作用域获取实例,避免生命周期不匹配导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 17:27:07