如何在C#的WebApplicationFactory中注入Mock服务?集成测试问题
问题解决:WebApplicationFactory中无法解析Scoped服务
错误原因
_apiFactory.Services是根服务提供者,属于单例生命周期,不允许直接解析Scoped类型的服务,这就是抛出System.InvalidOperationException的核心原因。
正确获取Scoped服务的方式
必须先创建一个服务作用域,在作用域内获取Scoped服务,作用域会在使用完成后自动释放相关服务实例:
// 创建服务作用域 using var scope = _apiFactory.Services.CreateScope(); // 在作用域内获取Scoped服务 var serviceTwo = scope.ServiceProvider.GetRequiredService<IServiceTwo>(); // 执行测试逻辑...
验证测试服务是否注册成功
如果要确认ConfigureTestServices中注册的服务是否生效,同样需要在作用域内检查Server.Services:
using var scope = _apiFactory.Server.Services.CreateScope(); var serviceProvider = scope.ServiceProvider; // 检查IServiceOne实例 var serviceOne = serviceProvider.GetService<IServiceOne>(); // 检查IServiceTwo实例 var serviceTwo = serviceProvider.GetService<IServiceTwo>();
内容的提问来源于stack exchange,提问作者sonodan
相关产品推荐
相关产品推荐

