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

.Net 5 Azure Function App使用Startup类配置连接字符串与依赖注入问题

问题根源说明

你混淆了ASP.NET Core的托管模型和Azure Function的专属托管模型:

  • ConfigureWebHostDefaults是ASP.NET Core Web应用的专属配置方法,不适用于Azure Function App,这就是你报错的直接原因
  • 你已经添加了[assembly: FunctionsStartup(typeof(Startup))]程序集标记,Azure Function运行时会自动识别这个标记,主动调用Startup类的Configure方法,不需要你在Program.cs中手动关联启动类

解决方案

1. 修正Program.cs代码

删掉冗余的CreateHostBuilder方法和不必要的AspNetCore相关命名空间引用,保留最小配置即可:

using Microsoft.Extensions.Hosting;

namespace kpi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .Build();
            host.Run();
        }
    }
}

2. 优化Startup.cs代码

你原有代码中手动构建ServiceProvider是多余操作,IFunctionsHostBuilder可以直接获取配置对象:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(Startup))]
namespace kpi
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            // 直接从上下文获取配置,无需手动构建服务提供者
            var configuration = builder.GetContext().Configuration;
            
            // 绑定配置节点
            var appSettingsSection = configuration.GetSection("AppSetting");
            builder.Services.Configure<AppSetting>(appSettingsSection);
            var appSettings = appSettingsSection.Get<AppSetting>();
            RuntimeConfig.appsettings = appSettings;

            // 注入数据库上下文
            var connectionString = appSettings.AppDBConnection;
            builder.Services.AddDbContext<ShardingDbContext>(options => 
                options.UseSqlServer(connectionString), ServiceLifetime.Transient);
            
            // 其他自定义服务依赖注入可以在此处添加
        }
    }
}

3. 确认配置项存在

  • 本地开发时请确保local.settings.json中存在对应的配置节点,示例结构:
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "你的Azure存储连接字符串",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AppSetting:AppDBConnection": "你的SQL Server数据库连接字符串"
  }
}
  • 部署到Azure后,直接在Function App的「配置」-「应用程序设置」中添加对应键值对即可。

前置依赖检查

必须提前安装匹配版本的Nuget包:

  • Microsoft.Azure.Functions.Extensions.DependencyInjection:提供Function依赖注入的基础能力
  • 隔离工作者模型还需要安装Microsoft.Azure.Functions.Worker系列基础包

配置完成后你可以直接在Function类的构造函数中注入IOptions<AppSetting>或者ShardingDbContext,能正常获取实例即代表配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:03