【问题标题】:Net Core: Find Services from WebApplicationFactoryNet Core:从 WebApplicationFactory 中查找服务
【发布时间】:2019-12-14 08:32:23
【问题描述】:

如何从 CustomWebApplicationFactory 获取所有服务? Startup 类对 IDepartmentRepository 和 IDepartmentAppService 进行了依赖注入。想要获取新的 DI 存储库或服务。

我们正在创建指向原始应用程序启动的集成测试。

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 
    }

https://fullstackmark.com/post/20/painless-integration-testing-with-aspnet-core-web-api

【问题讨论】:

    标签: c# asp.net-core dependency-injection .net-core


    【解决方案1】:

    它是factory.Host.Services。不要忘记,您需要创建一个范围来访问范围内的服务,例如您的上下文:

    using (var scope = _factory.Host.Services.CreateScope())
    {
        var foo = scope.ServiceProvider.GetRequiredService<Foo>();
        // do something
    }
    

    【讨论】:

    • 我收到错误“CustomWebApplicationFactory”不包含“Host”的定义,并且找不到接受“CustomWebApplicationFactory”类型的第一个参数的可访问扩展方法“Host”(您是否缺少 using 指令或程序集引用?)所以我不得不使用这个,var scope = _factory.Server.Host.Services.CreateScope()
    • 随意添加答案,我会删除我的答案并给予积分!谢谢!
    【解决方案2】:

    收到错误:

    “CustomWebApplicationFactory”不包含“Host”的定义,并且找不到接受“CustomWebApplicationFactory”类型的第一个参数的可访问扩展方法“Host”(您是否缺少 using 指令或程序集引用?)

    因此,我必须在添加服务器的情况下使用它,如下所示:

    using (var scope = _factory.Server.Host.Services.CreateScope())
    {
        // do something
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多