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

在.NET 8 Azure Function中,如何在ConfigureServices访问配置?

在.NET 8 Azure Function的ConfigureServices中直接通过配置键访问配置

要在ConfigureServices中直接通过配置键(如ConnectionStrings:MyConnectionString)获取配置,无需定义配置类或使用Options模式,你可以通过以下两种方式实现:

方式一:利用HostBuilder配置上下文(推荐)

修改ConfigureServices的委托,接收HostBuilderContext参数,该上下文已包含你在ConfigureAppConfiguration中构建的配置实例:

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureAppConfiguration(builder =>
    {
        var environment = Environment.GetEnvironmentVariable("ENVIRONMENT") ?? "development";

        builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();
    })
    .ConfigureServices((context, services) => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();

        // 直接从上下文获取配置
        var connectionString = context.Configuration["ConnectionStrings:MyConnectionString"];

        services.AddDbContext<AssetOwnershipContext>(options =>
        {
            options.UseSqlServer(connectionString);
        });
        
        services.AddScoped<IApplicationService, ApplicationService>();
        services.AddSingleton<GraphServiceClient>(sp =>
            new GraphServiceClient(
                new DefaultAzureCredential(new DefaultAzureCredentialOptions()
                {
                    ExcludeSharedTokenCacheCredential = true
                })
            )
        );
    })
    .Build();

host.Run();

方式二:从服务容器解析IConfiguration

如果不想依赖HostBuilderContext,可以临时构建服务提供者并解析IConfiguration实例:

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureAppConfiguration(builder =>
    {
        var environment = Environment.GetEnvironmentVariable("ENVIRONMENT") ?? "development";

        builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();
    })
    .ConfigureServices(services => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();

        // 从服务容器解析配置
        var config = services.BuildServiceProvider().GetRequiredService<IConfiguration>();
        var connectionString = config["ConnectionStrings:MyConnectionString"];

        services.AddDbContext<AssetOwnershipContext>(options =>
        {
            options.UseSqlServer(connectionString);
        });
        
        services.AddScoped<IApplicationService, ApplicationService>();
        services.AddSingleton<GraphServiceClient>(sp =>
            new GraphServiceClient(
                new DefaultAzureCredential(new DefaultAzureCredentialOptions()
                {
                    ExcludeSharedTokenCacheCredential = true
                })
            )
        );
    })
    .Build();

host.Run();

注意事项

  • 方式一更推荐,因为不需要额外构建服务提供者,性能更优且符合依赖注入的设计原则。
  • 确保appsettings.json或对应环境的配置文件中存在ConnectionStrings:MyConnectionString键值对,或者已通过环境变量配置该值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:56:15