C# Net核心:从WebApplicationFactory查找服务
如何从CustomWebApplicationFactory获取所有服务? Startup类已对IDepartmentRepository和IDepartmentAppService执行依赖项注入。想要获取新的DI存储库或服务 我们正在创建指向原始应用程序启动的集成测试C# Net核心:从WebApplicationFactory查找服务,c#,asp.net-core,dependency-injection,.net-core,C#,Asp.net Core,Dependency Injection,.net Core,如何从CustomWebApplicationFactory获取所有服务? Startup类已对IDepartmentRepository和IDepartmentAppService执行依赖项注入。想要获取新的DI存储库或服务 我们正在创建指向原始应用程序启动的集成测试 namespace Integrationtest { public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory&l
namespace Integrationtest
{
public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration((hostingContext, configurationBuilder) =>
{
var type = typeof(TStartup);
var path = @"C:\\OriginalApplicationWebAPI";
configurationBuilder.AddJsonFile($"{path}\\appsettings.json", optional: true, reloadOnChange: true);
configurationBuilder.AddEnvironmentVariables();
});
}
}
}
public class DepartmentAppServiceTest : IClassFixture<CustomWebApplicationFactory<OriginalApplication.Startup>>
{
public testDbContext context;
private readonly HttpClient _client;
public DepartmentAppServiceTest(CustomWebApplicationFactory<OriginalApplication.Startup> factory)
{
_client = factory.CreateClient();
factory. // trying to find services here for IDepartmentRepository
}
这是factory.Host.Services。不要忘记,您需要创建一个作用域来访问作用域服务,例如您的上下文:
using (var scope = _factory.Host.Services.CreateScope())
{
var foo = scope.ServiceProvider.GetRequiredService<Foo>();
// do something
}
收到的错误:
“CustomWebApplicationFactory”不包含“主机”的定义,并且找不到接受“CustomWebApplicationFactory”类型的第一个参数的可访问扩展方法“主机”。是否缺少using指令或程序集引用
因此,我必须在添加服务器的情况下使用它,如下所示:
using (var scope = _factory.Server.Host.Services.CreateScope())
{
// do something
}
我收到错误'CustomWebApplicationFactory'不包含'Host'的定义,并且找不到可访问的扩展方法'Host'接受类型为'CustomWebApplicationFactory'的第一个参数。您是否缺少using指令或程序集引用?因此我不得不使用它,var scope=\u factory.Server.Host.Services.createScope请随意添加答案,我将删除我的答案并打分!谢谢