如何在自定义WebApplicationFactory中使用.NET 6.0 WebApplication.CreateBuilder?
适配WebApplication模型的自定义WebApplicationFactory实现
你可以通过手动调用Startup类的ConfigureServices和Configure方法,替代原有的UseStartup<TStartup>调用,来适配WebApplication模型。修改后的TestWebApiFactory实现如下:
public class TestWebApiFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class { protected override void ConfigureClient(HttpClient client) { base.ConfigureClient(client); } protected override IHostBuilder CreateHostBuilder() { return Host.CreateDefaultBuilder() .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsettings.json"); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseTestServer(); // 手动调用Startup的服务配置方法 webBuilder.ConfigureServices(services => { var startup = Activator.CreateInstance<TStartup>(); startup.ConfigureServices(services); }); // 手动调用Startup的请求管道配置方法 webBuilder.Configure(app => { var startup = Activator.CreateInstance<TStartup>(); startup.Configure(app); }); }); } }
关键修改说明
- 移除
UseStartup<TStartup>:WebApplication模型不再依赖UseStartup自动绑定配置逻辑,改为手动拆分调用Startup类的核心方法,对齐新模型的配置流程 - 拆分配置逻辑:将原
Startup类的服务配置和管道配置分别移入ConfigureWebHostDefaults的ConfigureServices和Configure委托中,模拟WebApplication模型直接配置服务与管道的方式 - 保留原有配置:原有的
appsettings.json加载逻辑、ConfigureClient方法均保持不变,确保测试环境与生产环境的配置一致性
内容的提问来源于stack exchange,提问作者killswitch
相关产品推荐
相关产品推荐

