用途:为 dotnet/runtime 仓库中编写和修改 Microsoft.Extensions.* 与 System.IO.Compression 代码提供实现指导;完整代码评审可调用 @extensions-reviewer 子代理。
主要能力与要点:
- 依赖注入生命周期:无状态或构造后不可变用 Singleton(TryAddSingleton),注意持有 IDisposable 资源时容器的释放;逻辑操作级状态用 Scoped(TryAddScoped),禁止注入到 Singleton 以免产生 captive dependency;每次需要新实例用 Transient(TryAddTransient),避免用于 IDisposable 类型。Singleton 需要 Scoped 依赖时用 IServiceScopeFactory.CreateAsyncScope 按需建作用域。
- 配置绑定:裁剪或 AOT 发布使用源生成绑定并验证与运行时绑定器一致;否则用 services.Configure<TOptions>(config.GetSection("Key"))。绑定可链式 ValidateDataAnnotations 与 ValidateOnStart。配置键比较统一用 OrdinalIgnoreCase。
- Options 校验:实现 IValidateOptions<T>,返回 ValidateOptionsResult.Fail 或 Success。
- 日志:高频日志点用 [LoggerMessage] 源生成实现零分配;其余可用 ILogger.Log{Level}。
- 缓存:.NET 9+ 可用 HybridCache 的 GetOrCreateAsync 防缓存击穿。
- 压缩:避免首个 await 前的同步工作,直接以 BrotliStream 流式复制;解压时在非 Windows 平台按 ExternalAttributes 还原 Unix 权限。
- 托管生命周期:BackgroundService 的 ExecuteAsync 需处理 OperationCanceledException 优雅退出,其余异常记录后抛出交由宿主观察。
- 裁剪与 AOT:反射 API 标注 [DynamicallyAccessedMembers],提供功能开关,验证 PublishAot=true 不新增 IL2xxx 警告,并为反射模式提供源生成替代。
- 测试:缺陷修复配回归测试,特性覆盖正常与边界;压缩互操作测试须用外部工具生成的文件;计时相关测试用宽裕超时(托管服务生命周期压力管线 3 分钟以上);不得泄漏全局状态;源生成与运行时路径都要测;显式测试释放行为,释放后操作应抛 ObjectDisposedException;平台相关测试用 ConditionalFact/ConditionalTheory。
- 其他:同步与异步共享非平凡逻辑避免重复;抽象放 *.Abstractions,实现放具体包;库代码 await 调用加 ConfigureAwait(false);默认注册优先 TryAdd;行为变化即使签名不变也属破坏性变更。
限制:以上为技能文档提供的指导范围,未提供该技能的价格、收费、平台支持或效果等事实,暂未提供。