通过TContextService和TContextImplementation对AddDbContextCheck进行运行状况检查

时间:2019-09-17 15:01:08

标签: c# asp.net-core entity-framework-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进行实体框架的运行状况检查吗?

1 个答案:

答案 0 :(得分:1)

您似乎遇到了两者无法一起使用的情况。我认为您有两种选择:

首先是直接注册DbContext,然后通过该注册来解析接口。

services.AddDbContext<MyDbContext>(options => options.UseNpgsql(myDatabaseConnectionString));
services.AddTransient<IMyDbContext>(c=>c.GetRequiredService<MyDbContext>());

另一个选择是自己实施运行状况检查功能。这并不完全困难。

请参阅:EntityFrameworkCoreHealthChecksBuilderExtensions.csDbContextHealthCheck.cs