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

推荐订阅源

S
Schneier on Security
The Register - Security
The Register - Security
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
博客园 - 司徒正美
罗磊的独立博客
U
Unit 42
S
SegmentFault 最新的问题
Y
Y Combinator Blog
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
V
Vulnerabilities – Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
S
Securelist
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Scott Helme
Scott Helme
博客园 - 聂微东
博客园 - 【当耐特】
T
Tenable Blog
I
Intezer
D
DataBreaches.Net
B
Blog RSS Feed
Security Latest
Security Latest
C
Cisco Blogs
T
Tor Project blog
N
Netflix TechBlog - Medium

博客园 - 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 客户端

配置读取器