Я использую веб-приложение .NET Core 3.1. Установлены следующие пакеты:
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.HealthChecks" Version="2.2.0" />
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="3.1.2" />
Внутри моего класса Startup.cs я регистрирую свои HealthChecks следующим образом:
services.AddHealthChecksUI();
services.AddHealthChecks()
.AddCheck("SQL Server", new SqlServerConnectionHealthCheck(connectionString), HealthStatus.Unhealthy)
.AddCheck("Redis", new RedisConnectionHealthCheck(), HealthStatus.Unhealthy)
.AddCheck("CRM", new CrmConnectionHealthCheck(), HealthStatus.Unhealthy)
.AddCheck("DMS", new DmsConnectionHealthCheck(), HealthStatus.Unhealthy);
app.UseEndpoints(endpointRouteBuilder =>
{
endpointRouteBuilder.MapControllers();
endpointRouteBuilder.MapHealthChecks("/health");
endpointRouteBuilder.MapHealthChecksUI(options =>
{
options.UIPath = "/healthui";
});
}
К сожалению, как только мое приложение запускается, я получаю следующее исключение:
Необработанное исключение. System.InvalidOperationException: не было зарегистрировано ни одной службы для типа HealthChecks.UI.Core.Data.HealthChecksDb.
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider, тип serviceTypejection.DependencyExtensions.Dependency .ServiceProviderServiceExtensions.GetRequiredService [T] (провайдер IServiceProvider) в HealthChecks.UI.Core.HostedService.UIInitializationHostedService.InitializeDatabase (IServiceProvider sp) в HealthChecks.UI.CoreviceProvider sp) в HealthChecks.UI.CoreviceNosted HostedServiceExecutor.ExecuteAsync (обратный вызов Func`2, логическое throwOnFirstFailure) в Microsoft.AspNetCore.Hosting.WebHost.StartAsync (CancellationToken cancellationToken) в Microsoft.AspNetCore.Hosting. hostWebHostExynctensions, CancellationHosting. hostWebHostExynctensions, .Hosting.WebHostEx tensions.RunAsync (хост IWebHost, токен CancellationToken, String startupMessage) в Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync (хост IWebHost, токен CancellationToken) в Microsoft.AspNetCore.Hosting.WebHostExtensions.WebHostExtensions.WebHostExtensions. .portal.api.Program.Main (String [] args) в C: \ Repos *** \ Program.cs: строка 26
Это исключение возникает только при использовании AddHealthChecksUI()
. Я думаю, что API пытается сохранить данные, поэтому он ищет экземпляр HealthChecksDb
(который является DbContext). Но почему AddHealthChecksUI()
не регистрирует сам DbContext? А что я делаю не так?