namespace HrynCo.Common.HealthChecks; using System.ComponentModel.DataAnnotations; using HrynCo.Common.HealthChecks.Interfaces; using Microsoft.Extensions.Diagnostics.HealthChecks; public abstract class BaseConfigurationCheck : IConfigurationCheck where TOptions : class { private readonly string _name; private readonly TOptions _options; protected BaseConfigurationCheck(TOptions options, string name) { _options = options; _name = name; } public Task CheckConfigurationAsync(CancellationToken cancellationToken) { var context = new ValidationContext(_options); var results = new List(); bool isValid = Validator.TryValidateObject( _options, context, results, true ); if (!isValid) { string errors = string.Join("; ", results.Select(r => r.ErrorMessage)); return Task.FromResult(HealthCheckResult.Unhealthy($"{_name} configuration invalid: {errors}")); } return Task.FromResult(HealthCheckResult.Healthy($"{_name} configuration is valid.")); } }