如何结合Action<IServiceProvider>使用IHealthChecksBuilder.AddTypeActivatedCheck<T>?
解决方案
可以通过IHealthChecksBuilder.AddCheck的重载方法实现需求——它既允许你访问IServiceProvider解析依赖构建健康检查,又能设置健康检查的元数据(名称、标签、失败条件等)。
具体实现示例
假设你有一个自定义健康检查类MyCustomHealthCheck,需要从DI容器中解析依赖项,同时要配置它的元数据:
builder.Services.AddHealthChecks() .AddCheck("custom_health_check", sp => { // 在这里访问IServiceProvider,解析所需依赖 var dependency = sp.GetRequiredService<IMyDependency>(); return new MyCustomHealthCheck(dependency); }, failureStatus: HealthStatus.Degraded, tags: new[] { "custom", "database" }, timeout: TimeSpan.FromSeconds(5));
关键说明
AddTypeActivatedCheck<T>本身的设计是直接通过构造函数注入DI中的依赖,不需要额外的Action<IServiceProvider>委托。如果你的健康检查类的构造函数参数都能被DI自动解析,直接使用AddTypeActivatedCheck<T>即可:builder.Services.AddHealthChecks() .AddTypeActivatedCheck<MyCustomHealthCheck>("custom_check", failureStatus: HealthStatus.Unhealthy);- 当你需要更灵活的控制(比如手动解析依赖、执行额外DI操作),
AddCheck的Func<IServiceProvider, IHealthCheck>重载是最优选择,它完全满足你访问服务容器+设置元数据的需求,比AddScoped<IHealthCheck>的方式更贴合健康检查的配置场景。
内容的提问来源于stack exchange,提问作者Jason Ayer
相关产品推荐
相关产品推荐

