Asp.net core 从WebApplicationFactory获取服务<;T>;在ASP.NET核心集成测试中

Asp.net core 从WebApplicationFactory获取服务<;T>;在ASP.NET核心集成测试中,asp.net-core,asp.net-core-mvc,asp.net-core-webapi,asp.net-core-2.1,Asp.net Core,Asp.net Core Mvc,Asp.net Core Webapi,Asp.net Core 2.1,我想使用WebApplicationFactory设置测试,如中所述 在进行一些测试之前,我需要使用在RealStartup类中配置的服务来进行设置。 我的问题是,我找不到从工厂得到服务的方法 我可以使用factory.Host.Services.GetRequiredService()从factory.Server获取服务除了factory.Server在factory.CreateClient()之前为空之外已被调用 有没有什么方法让我无法使用工厂获得服务 谢谢。您需要从服务提供商处创建一

我想使用
WebApplicationFactory
设置测试,如中所述

在进行一些测试之前,我需要使用在RealStartup类中配置的服务来进行设置。 我的问题是,我找不到从工厂得到服务的方法

我可以使用
factory.Host.Services.GetRequiredService()从
factory.Server
获取服务除了
factory.Server
factory.CreateClient()之前为空之外已被调用

有没有什么方法让我无法使用工厂获得服务


谢谢。

您需要从服务提供商处创建一个范围,以获得必要的服务:

using (var scope = AppFactory.Server.Host.Services.CreateScope())
{
    var context = scope.ServiceProvider.GetRequiredService<MyDatabaseContext>();
}
使用(var scope=AppFactory.Server.Host.Services.CreateScope())
{
var context=scope.ServiceProvider.GetRequiredService();
}
请原谅。我知道你要求的是NetCore2.1,但是自从v3.1+的用户也来到这里

我的项目使用NetCore3.1。当我像Alexey Starchikov的建议一样使用AppFactory.Server.Host.Services.CreateScope()时,我遇到了这个错误

The TestServer constructor was not called with a IWebHostBuilder so IWebHost is not available.
这里提到

所以我使用下面的方法。我将数据库种子植入测试类的构造函数中。注意,我不必调用
factory.CreateClient()
。我像往常一样在测试方法中创建客户机变量

using (var scope = this.factory.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>();

    // Seeding ...

    dbContext.SaveChanges();
}
使用(var scope=this.factory.Services.CreateScope())
{
var dbContext=scope.ServiceProvider.GetRequiredService();
//播种。。。
dbContext.SaveChanges();
}

用于测试的启动程序难道不能注册并使用该服务吗?展示你到目前为止所做的一切,你可以定制工厂,谢谢@Nkosi。我需要得到一个在真实启动中注册的服务,而不是在测试启动中注册的服务。我想使用完全配置的应用程序运行一个测试,所以我需要得到真正的服务,调用几个方法来设置一些数据,然后运行我的测试场景。我需要能够在每个测试中获得此服务。创建从真实启动继承的测试启动。覆盖configureservices、呼叫库、构建提供者获取服务和执行设置如果我能看到一些代码,我可能会提供更详细的解释。太好了。非常感谢。如果<代码>工厂.Server < /代码>是<代码> null <代码>,请考虑调用<代码>工厂.CurrCeCiTrand()< <代码> >!也适用于5.0!