惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
D
Docker
GbyAI
GbyAI
宝玉的分享
宝玉的分享
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Vercel News
Vercel News
博客园_首页
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
V
V2EX
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 12不懂3

分布式锁 分布式事务 Myql索引篇+c#性能优化篇 jwt验证机制 HttpHelper .net7.0 .net升级7.0报错1. MySqlConnection is already in use. See https://fl.vu/mysql-conn-reuse 2.SqlSugar.SqlSugarException: Cannot Open when State is Connecting. 3.The current TransactScope is already complete Windos Elastocsearch安装部署汉化 Mysql ElasticSearch C# Common中心目录 ABP.VNET 原书籍《Effective C#:改善C#代码的50个有效方法》 精炼18点 ABP IO读写+Epoll多路复用,计算机底层解析 c# 技术点总结 kuberspere管理工具+k8s安装 K8s核心组件理解 数据库事务和锁
IOC容器
12不懂3 · 2026-03-05 · via 博客园 - 12不懂3

IOC 依赖过深会有什么问题?

依赖过深会导致对象图复杂化,增加启动成本和内存消耗,同时增强隐式耦合,降低系统可测试性和可维护性。在高并发场景下还可能导致事务边界失控和生命周期错配风险。从架构角度来看,依赖过深说明模块边界划分不清晰,属于设计层面的复杂度失控问题。

IOC 解决的是依赖方向问题,它配合 DIP 才能真正实现架构解耦。

但 IOC 只是基础设施,真正的架构能力体现在如何控制依赖深度、如何设计模块边界,以及如何防止依赖失控。

为什么 Singleton 不能依赖 Scoped?

你可以回答:

因为生命周期不对称。Singleton 生命周期长于 Scoped,如果注入 Scoped,会导致依赖俘获,造成逻辑内存泄漏、已释放对象访问以及线程安全问题。正确做法是通过作用域工厂动态创建 Scope。

生命周期依赖规则是什么?

你可以这样答:

生命周期依赖必须满足包含关系,被引用对象的生命周期不能短于引用它的对象。否则会导致依赖俘获问题,引发内存滞留、已释放对象访问以及线程安全风险。

真正架构师会多想一步

依赖生命周期问题,通常暴露两个更深层问题:

职责是否划分合理?

是否把数据库操作放到了不该是单例的服务中?

Singleton Scoped Singleton 的生命周期是怎么样的

所以基础设施一次创建永久使用就用 singletion 其他都是scoped

为什么不考虑 transient 因为每次都需要创建对象 无法共享 在高并发系统中需避免频繁创建重对象,否则会增加 GC 压力。

生命周期

创建时机

存储位置

释放时机

典型场景

Singleton(单例)

第一次解析时

Root Provider(根容器)

应用关闭

缓存、客户端

Scoped(作用域)

每个 Scope 第一次解析

当前 Scope

Scope 结束

DbContext

Transient(瞬时)

每次解析

不缓存

由 GC 回收

轻量对象

1️⃣ 纯算法类 → Singleton

规则计算核心算法

凭证格式构建器

2️⃣ 业务编排类 → Scoped 全局唯一

例如:

销账应用服务

├── 调用规则引擎

├── 调用凭证生成器

├── 调用仓储

└── 发布事件

这个必须 Scoped。 作用域 一次请求

因为它涉及:

事务

用户上下文

数据库

3️⃣ 基础设施类 → Singleton

Redis 客户端

MQ 客户端

配置读取器