c# - 在 ConfigureServices 中访问 IOptions 和 DbContext
问题描述
我已经开始在我的 .NET Core Web API 中实施健康检查。有两种健康检查,一种用于检查 SQL Server 是否有任何挂起的迁移,另一种用于检查另一个 API 是否处于活动状态。两者都ConfigureServices
在Startup
课堂上添加。
为了进行迁移检查,我需要访问DbContext
已经添加到 DIAddDbContext
的使用并检查 API,我需要从配置中获取 API 基本 url,使用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
.
非常感谢任何帮助。
解决方案
您可以像这样注册您的健康检查:
services.AddHealthChecks()
.AddCheck<ExampleHealthCheck>("Database");
然后只需将您注入DbContext
到ExampleHealthCheck
必须实现IHealthCheck
接口的类中
推荐阅读
- c# - Roslyn - 查找对具有调用详细信息的方法的所有引用(具体的通用参数)
- oauth-2.0 - 无法从 v2.0 Azure tokenEndpoints 获取 oauth v2.0 access_token
- git - 队友修改更改后面临自动合并失败
- json - 如何从 json 中获取图像并将其放置在轮播中?扑
- mysql - Mysql 5.7:选择所有列,但在选择的开头特别看到一个
- java - 列中不允许空值 - 旧数据库
- mongodb - Mongodb聚合$或$eq上的条件
- angular - Angular Ngrx - 如何让不同的调用循环数组?
- python - 将列表中的元素与以下元素相除?
- python-3.x - 重试装饰方法 Python Nosetest 的单元测试