flowchart TD
subgraph DI容器核心组件
A[ServiceCollection] --> B[服务描述符集合]
B --> C[ServiceDescriptor]
C --> D[ServiceType]
C --> E[ImplementationType]
C --> F[Lifetime]
G[ServiceProvider] --> H[服务解析器]
H --> I[生命周期管理器]
H --> J[实例缓存]
end
subgraph 生命周期管理
K[Singleton] --> L[全局唯一实例]
K --> M[首次解析创建]
N[Scoped] --> O[作用域内共享]
N --> P[请求级别隔离]
Q[Transient] --> R[每次解析新建]
Q --> S[无状态服务]
end
subgraph 高级注册方式
T[AddSingleton]
U[AddScoped]
V[AddTransient]
W[AddKeyedSingleton] --> X[键控服务]
W --> Y[同一接口多实现]
Z[AddOpenGeneric] --> AA[泛型模板注册]
Z --> AB[运行时闭包]
AC[TryAdd*] --> AD[条件注册]
AD --> AE[避免重复注册]
end
subgraph 服务解析流程
AF[请求服务] --> AG{服务已注册?}
AG -->|否| AH[抛出异常]
AG -->|是| AI{已有缓存?}
AI -->|是| AJ[返回缓存实例]
AI -->|否| AK[创建实例]
AK --> AL[解析依赖]
AL --> AM[递归解析]
AM --> AN[构建依赖树]
AN --> AO[创建实例]
AO --> AP{Singleton?}
AP -->|是| AQ[存入缓存]
AP -->|否| AR[返回实例]
AQ --> AR
end
subgraph 装饰器模式
AS[Decorator Pattern] --> AT[包装现有服务]
AT --> AU[添加横切关注点]
AV[AddDecorator] --> AW[注册装饰器]
AW --> AX[链式装饰]
AX --> AY[多层包装]
end
subgraph 条件注册
AZ[AddConditional] --> BA[基于条件注册]
BA --> BB[环境变量判断]
BA --> BC[配置值判断]
BD[AddPolicy] --> BE[策略模式]
BE --> BF[运行时选择]
end
subgraph 验证与诊断
BG[ValidateOnBuild] --> BH[构建时验证]
BH --> BI[循环依赖检测]
BJ[ServiceProviderDebugView] --> BK[依赖关系可视化]
BL[DiagnosticSource] --> BM[解析追踪]
end
A --> T
A --> U
A --> V
A --> W
A --> Z
A --> AC
A --> AZ
A --> BD
G --> AF
H --> AI
I --> K
I --> N
I --> Q