我正在尝试简化 ASP.NET Core 集成测试项目中的 DI 范围。目前,我创建了三个范围,一个用于只读
DbContext
,一个用于只写 DbContext
,一个用于其他所有内容。我真的很想将其简化为单个范围,但问题是我需要两个单独的 DbContext
实例,这样我就可以在测试中进行独立的读写操作。
使用
IServiceProvider
时是否可以使用 GetRequiredServices<T>()
请求服务的不同实例?
这不是最惯用的解决方案,但如果您没有很多服务并且只想将其用于测试目的 - 您可以手动实例化 DbContext 及其所有服务。
YourDbContext GetNewDbContext(IServiceScope scope)
{
var serviceA = scope.GetRequiredService<IService>();
var serviceB = ...;
return new YourDbContext(serviceA, ...);
}