using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Diagnostics.HealthChecks;
namespace Microsoft.Extensions.DependencyInjection;
public static class HealthChecksBuilderExtensions
{
public static IHealthChecksBuilder AddHealthCheckRegistration<T>(this IHealthChecksBuilder builder)
where T : class, IHealthCheck
=> builder.AddHealthCheckRegistration<T>(string.Empty);
public static IHealthChecksBuilder AddHealthCheckRegistration<T>(this IHealthChecksBuilder builder, Action<HealthCheckRegistration> configure)
where T : class, IHealthCheck
=> builder.AddHealthCheckRegistration<T>(string.Empty, configure);
public static IHealthChecksBuilder AddHealthCheckRegistration<T, TDep1>(this IHealthChecksBuilder builder, Action<HealthCheckRegistration, TDep1> configure)
where T : class, IHealthCheck
where TDep1 : class
=> builder.AddHealthCheckRegistration<T, TDep1>(string.Empty, configure);
public static IHealthChecksBuilder AddHealthCheckRegistration<T>(this IHealthChecksBuilder builder, string name)
where T : class, IHealthCheck
{
var factory = () => new HealthCheckRegistration(name, GetServiceOrCreateInstance, null, null, null);
return builder.AddHealthCheckRegistration<T>(factory);
static T GetServiceOrCreateInstance(IServiceProvider serviceProvider) =>
ActivatorUtilities.GetServiceOrCreateInstance<T>(serviceProvider);
}
public static IHealthChecksBuilder AddHealthCheckRegistration<T>(this IHealthChecksBuilder builder, string name, Action<HealthCheckRegistration> configure)
where T : class, IHealthCheck
{
var factory = () =>
{
var registration = new HealthCheckRegistration(name, GetServiceOrCreateInstance, null, null, null);
configure(registration);
return registration;
};
return builder.AddHealthCheckRegistration<T>(factory);
static T GetServiceOrCreateInstance(IServiceProvider serviceProvider)
=> ActivatorUtilities.GetServiceOrCreateInstance<T>(serviceProvider);
}
public static IHealthChecksBuilder AddHealthCheckRegistration<T, TDep1>(this IHealthChecksBuilder builder, string name, Action<HealthCheckRegistration, TDep1> configure)
where T : class, IHealthCheck
where TDep1 : class
{
var factory = (TDep1 dep1) =>
{
var registration = new HealthCheckRegistration(name, GetServiceOrCreateInstance, null, null, null);
configure(registration, dep1);
return registration;
};
return builder.AddHealthCheckRegistration<T, TDep1>(factory);
static T GetServiceOrCreateInstance(IServiceProvider serviceProvider)
=> ActivatorUtilities.GetServiceOrCreateInstance<T>(serviceProvider);
}
public static IHealthChecksBuilder AddHealthCheckRegistration<T>(this IHealthChecksBuilder builder, Func<HealthCheckRegistration> factory)
where T : class, IHealthCheck
{
builder.Services.TryAddTransient<T>();
builder.Services
.AddOptions<HealthCheckServiceOptions>()
.PostConfigure(options =>
{
options.Registrations.Add(factory());
});
return builder;
}
public static IHealthChecksBuilder AddHealthCheckRegistration<T, TDep1>(this IHealthChecksBuilder builder, Func<TDep1, HealthCheckRegistration> factory)
where T : class, IHealthCheck
where TDep1 : class
{
builder.Services.TryAddTransient<T>();
builder.Services
.AddOptions<HealthCheckServiceOptions>()
.PostConfigure<TDep1>((options, dep1) =>
{
options.Registrations.Add(factory(dep1));
});
return builder;
}
}