You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 7中如何通过WebApplication获取HostBuilderContext

在ASP.NET Core 7顶级语句中获取HostingEnvironment并注册配置服务

在ASP.NET Core 7的顶级语句模式下,有两种简洁方式可以获取HostingEnvironment并完成配置服务的注册,同时满足你添加DbContext的需求:

方法一:通过builder.Host.ConfigureServices获取HostBuilderContext

WebApplicationBuilder的Host属性支持调用ConfigureServices方法,这里可以直接拿到HostBuilderContext,和你之前使用Host.CreateDefaultBuilder的写法逻辑一致:

var builder = WebApplication.CreateBuilder(args);

// 借助Host.ConfigureServices获取HostBuilderContext
builder.Host.ConfigureServices((hostBuilderContext, services) =>
{
    var env = hostBuilderContext.HostingEnvironment;
    // 注册对应环境的配置文件
    services.RegisterAppSettings<Config>($"appsettings.{env.EnvironmentName}.json");
});

// 添加DbContext(此时IDatabaseConfig已注册到DI容器)
builder.Services.AddDbContext<EntityDbContext>((provider, options) =>
{
    var dbCfg = provider.GetRequiredService<IDatabaseConfig>();
    options.UseSqlServer(dbCfg);
});

// 其他基础服务注册
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 中间件配置
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

方法二:直接使用builder.Environment获取HostingEnvironment

WebApplicationBuilder本身自带Environment属性,无需通过HostBuilderContext,写法更直接:

var builder = WebApplication.CreateBuilder(args);

// 直接从builder实例获取环境信息
var env = builder.Environment;
builder.Services.RegisterAppSettings<Config>($"appsettings.{env.EnvironmentName}.json");

// 添加DbContext
builder.Services.AddDbContext<EntityDbContext>((provider, options) =>
{
    var dbCfg = provider.GetRequiredService<IDatabaseConfig>();
    options.UseSqlServer(dbCfg);
});

// 其他基础服务注册
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 中间件配置
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

注意事项

  • 两种方法均可满足需求:方法一适合需要访问HostBuilderContext其他属性(如Configuration)的场景;方法二更简洁,适合仅需获取环境信息的场景。
  • 务必确保IDatabaseConfig的注册代码在添加DbContext之前执行,保证DI容器能正确解析出对应实例。

内容的提问来源于stack exchange,提问作者Stephen York

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:12:14