【发布时间】:2020-08-30 03:36:20
【问题描述】:
我已经开始在我的 .NET Core Web API 中实施健康检查。有两种运行状况检查,一种用于检查 SQL Server 是否有任何挂起的迁移,另一种用于检查另一个 API 是否处于活动状态。两者都添加在 ConfigureServices 的 Startup 类中。
为了进行迁移检查,我需要使用 AddDbContext 访问已经添加到 DI 的 DbContext 并检查 API,我需要从已经存在的配置中获取 API 基本 url DI 使用services.Configure<>。我使用以下代码访问DbContext。
我正在使用AspNetCore.HealthChecks.Uris 包来使用AddUrlGroup 健康检查。
var sp = services.BuildServiceProvider();
var dbContext = sp.GetService<AppDbContext>();
var apis = sp.GetService<IOptions<InternalServicesConfiguration>>().Value;
services.AddHealthChecks().AddCheck("Database", new SqlDatabaseHealthCheck(dbContext), tags: new[] { "ready" })
.AddUrlGroup(new Uri(new Uri(apis.Api1BaseUri), "/health/live"), HttpMethod.Get, "API 1", HealthStatus.UnHealthy, new []{"ready"});
但services.BuildServiceProvider() 显示以下警告:
从应用程序代码中调用“BuildServiceProvider”会导致创建一个额外的单例服务副本。考虑将依赖注入服务等替代方案作为“配置”的参数
我可以使用
获取 api 基本网址_configuration.GetSection("InternalServicesConfiguration").Get(typeof(InternalServicesConfiguration));
但我想不出另一种访问DbContext 的方法。
非常感谢任何帮助。
【问题讨论】:
标签: c# asp.net-core