TContextService 和 TContextImplementation 对 AddDbContextCheck 进行健康检查

hsd*_*hsd 8 c# entity-framework-core asp.net-core

我通过TContextServiceTContextImplementation选项设置我的 DBContext。像这样的东西:

services.AddDbContext<IMyDbContext, MyDbContext>(options => options.UseNpgsql(myDatabaseConnectionString));

当我尝试使用此代码时,我尝试从Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore启用运行状况检查

services.AddHealthChecks().AddDbContextCheck<MyDbContext>() 我从健康终点反应中得到的信息是

InvalidOperationException:尝试激活“Microsoft.Extensions.Diagnostics.HealthChecks.DbContextHealthCheck`1[MyDbContext]”时无法解析类型“MyDbContext”的服务。Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorMatcher.CreateInstance(IServiceProvider 提供程序) Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance(IServiceProvider 提供程序,类型 instanceType,对象[] 参数) Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider 提供程序)

您知道使用两个选项TContextServiceTContextImplementation通过实体框架进行健康检查的任何方法吗?

Eup*_*ric 7

您似乎遇到了两者无法一起工作的情况。我认为你有两个选择:

首先是直接注册 DbContext,然后从该注册中解析接口。

services.AddDbContext<MyDbContext>(options => options.UseNpgsql(myDatabaseConnectionString));
services.AddTransient<IMyDbContext>(c=>c.GetRequiredService<MyDbContext>());
Run Code Online (Sandbox Code Playgroud)

另一种选择是自己实现健康检查功能。这并不难。

请参阅:EntityFrameworkCoreHealthChecksBuilderExtensions.csDbContextHealthCheck.cs