.NET 6中如何在Autofac模块内注册HealthCheck
在Autofac模块中注册.NET 6健康检查的实现方案
你遇到的问题是builder.AddCheck是.NET健康检查的扩展方法,Autofac的ContainerBuilder并没有这个方法,需要换一种方式在模块中注册健康检查:
1. 确保健康检查类实现IHealthCheck
自定义健康检查类必须实现官方的IHealthCheck接口:
public class MyServiceHealthCheck : IHealthCheck { public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { // 编写你的健康检查逻辑 return Task.FromResult(HealthCheckResult.Healthy("服务A状态正常")); } }
2. 在Autofac模块中注册健康检查
在InfrastructureModule中需要完成两个核心注册:注册健康检查实例,以及注册HealthCheckRegistration让健康检查系统识别它:
public class InfrastructureModule : Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<ApplicationDbContext>().InstancePerLifetimeScope(); builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope(); // 1. 注册健康检查类为IHealthCheck实例 builder.RegisterType<MyServiceHealthCheck>().As<IHealthCheck>().InstancePerLifetimeScope(); // 2. 注册HealthCheckRegistration,提供检查的元数据信息 builder.Register(c => new HealthCheckRegistration( "Service ACheck", sp => sp.Resolve<MyServiceHealthCheck>(), HealthStatus.Unhealthy, new[] { "service", "a" } // 可选标签,用于分组筛选检查 )).As<IHealthCheckRegistration>().SingleInstance(); } }
3. 在Program.cs中配置健康检查基础服务
必须在Program.cs中调用AddHealthChecks()初始化健康检查系统,并映射访问端点:
var builder = WebApplication.CreateBuilder(args); // 配置Autofac作为DI容器 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer<ContainerBuilder>(container => { container.RegisterModule(new InfrastructureModule()); }); // 初始化健康检查核心服务 builder.Services.AddHealthChecks(); var app = builder.Build(); // 映射健康检查端点,访问/health即可查看检查结果 app.MapHealthChecks("/health"); app.Run();
关键说明
AddHealthChecks()是.NET健康检查系统的初始化入口,必须在Program.cs中调用,它会注册健康检查所需的核心服务- Autofac模块负责注册自定义健康检查的实例和对应的注册信息,让健康检查系统能够发现并执行你的自定义检查
内容的提问来源于stack exchange,提问作者Arh Hokagi
相关产品推荐
相关产品推荐

