从 IServiceProvider 获取 DbContext 的多个实例

问题描述 投票:0回答:1

我正在尝试简化 ASP.NET Core 集成测试项目中的 DI 范围。目前,我创建了三个范围,一个用于只读

DbContext
,一个用于只写
DbContext
,一个用于其他所有内容。我真的很想将其简化为单个范围,但问题是我需要两个单独的
DbContext
实例,这样我就可以在测试中进行独立的读写操作。

使用

IServiceProvider
时是否可以使用
GetRequiredServices<T>()
请求服务的不同实例?

c# .net asp.net-core entity-framework-core
1个回答
0
投票

这不是最惯用的解决方案,但如果您没有很多服务并且只想将其用于测试目的 - 您可以手动实例化 DbContext 及其所有服务。

YourDbContext GetNewDbContext(IServiceScope scope)
{
  var serviceA = scope.GetRequiredService<IService>();
  var serviceB = ...;
  return new YourDbContext(serviceA, ...);
}
© www.soinside.com 2019 - 2024. All rights reserved.