flowchart TD
subgraph DI容器架构
A[ServiceCollection] --> B[服务定义存储]
B --> C[ServiceDescriptor列表]
D[ServiceProvider] --> E[根容器]
E --> F[Scoped容器]
F --> G[子容器]
end
subgraph 服务注册机制
H[AddSingleton] --> I[单例服务注册]
I --> J[实例缓存]
K[AddScoped] --> L[作用域服务注册]
L --> M[作用域缓存]
N[AddTransient] --> O[瞬时服务注册]
O --> P[每次新建]
Q[AddKeyed*] --> R[键控服务]
R --> S[基于键解析]
T[AddOpenGeneric] --> U[开放泛型注册]
U --> V[运行时类型闭包]
end
subgraph 服务解析流程
W[GetService] --> X{检查缓存}
X -->|命中| Y[返回缓存实例]
X -->|未命中| Z[创建实例]
Z --> AA[解析依赖类型]
AA --> AB[递归解析依赖]
AB --> AC[构建依赖链]
AC --> AD{循环依赖?}
AD -->|是| AE[抛出异常]
AD -->|否| AF[创建实例]
AF --> AG{需要缓存?}
AG -->|是| AH[存入缓存]
AG -->|否| AI[直接返回]
AH --> AI
AI --> Y
end
subgraph 生命周期管理
AJ[Singleton生命周期] --> AK[全局共享]
AK --> AL[首次创建后复用]
AM[Scoped生命周期] --> AN[作用域内共享]
AN --> AO[请求边界隔离]
AP[Transient生命周期] --> AQ[无状态]
AQ --> AR[无缓存]
AS[Root Scope] --> AT[应用级别]
AT --> AU[跨请求共享]
end
subgraph 装饰器模式实现
AV[Decorator Registration] --> AW[包装原始服务]
AW --> AX[添加横切逻辑]
AX --> AY[保留接口契约]
AZ[Multiple Decorators] --> BA[链式包装]
BA --> BB[责任链模式]
end
subgraph 条件注册机制
BC[AddConditional] --> BD[条件判断]
BD --> BE[环境变量]
BD --> BF[配置值]
BD --> BG[类型检查]
BH[AddPolicy] --> BI[策略选择器]
BI --> BJ[运行时决策]
end
subgraph 泛型支持
BK[Open Generic] --> BL[类型模板]
BL --> BM[运行时具体化]
BN[Closed Generic] --> BO[具体类型]
BO --> BP[直接注册]
end
subgraph 验证与诊断
BQ[ValidateOnBuild] --> BR[循环依赖检测]
BR --> BS[注册完整性检查]
BT[Debug View] --> BU[依赖关系图]
BU --> BV[服务树展示]
BW[DiagnosticSource] --> BX[解析追踪]
BX --> BY[性能监控]
end
B --> H
B --> K
B --> N
B --> Q
B --> T
E --> W
F --> W