首页 新闻 会员 周边 捐助

在ASP.NET Core 集成测试的 WebApplicationFactory 中如何抢在 Startup.ConfigureServices 之前注册服务

0
悬赏园豆:30 [已解决问题] 解决于 2023-01-10 13:00

想在 WebApplicationFactory 中抢在 Web 项目的 Startup.ConfigureServices 之前注册服务,尝试的代码如下

public class CustomeWebApplicationFactory : WebApplicationFactory<Startup>
{
    protected override IHost CreateHost(IHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            services.AddCnblogsAuthentication(options => options.Cookie.Domain = "localhost");
        });
        return base.CreateHost(builder);
    }
}

虽然 CreateHost 会在 Startup.ConfigureServices 之前执行,但 builder.ConfigureServices 中的 action 依然在 Startup.ConfigureServices 之后执行

dudu的主页 dudu | 高人七级 | 园豆:30939
提问于:2023-01-10 12:00
< >
分享
最佳答案
0

通过 override CreateHostBuilder 解决了

public class CustomeWebApplicationFactory : WebApplicationFactory<Startup>
{
    protected override IHostBuilder CreateHostBuilder()
    {
        return Host.CreateDefaultBuilder()
            .ConfigureServices(services =>
            {
                services.AddCnblogsAuthentication(options => options.Cookie.Domain = "localhost");
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }
}

CreateHostBuilder 中不写 base.CreateWebHostBuilder(),就不会执行 Web 项目 Program 中的 CreateHostBuilder

dudu | 高人七级 |园豆:30939 | 2023-01-10 13:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册