【问题标题】:Health check for AddDbContextCheck by TContextService and TContextImplementation通过 TContextService 和 TContextImplementation 对 AddDbContextCheck 进行健康检查
【发布时间】:2019-09-17 23:15:35
【问题描述】:

我通过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这两个选项进行健康检查吗?

【问题讨论】:

标签: c# asp.net-core entity-framework-core


【解决方案1】:

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

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

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

另一种选择是自己实现运行状况检查功能。这并不难。

请参阅:EntityFrameworkCoreHealthChecksBuilderExtensions.csDbContextHealthCheck.cs

【讨论】:

    猜你喜欢
    • 2019-02-15
    • 2014-10-02
    • 2015-10-27
    • 1970-01-01
    • 2018-06-15
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多