Azure 函数从配置访问连接字符串

Pri*_*hal 3 c# azure-sql-database azure-functions

我在 Azure Linux 环境中托管了 Azure Function V3。我正在尝试从配置部分读取连接字符串。但我不明白。我尝试将连接字符串放在两者上,Application Settings以及Connection Strings如下所示的部分。

在此处输入图片说明

我正在使用依赖注入,我的Startup课程如下所示。

using BHD.Data.Data;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;

[assembly: FunctionsStartup(typeof(BHD.AzureFunctions.Startup))]
namespace BHD.AzureFunctions
{
    class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var sqlConnection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            builder.Services.AddDbContext<ApplicationDbContext>(
                options => options.UseSqlServer(sqlConnection));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

即使文件中存在连接字符串,我也能NullPointerException继续,如下所示。ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionStringlocal.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  },
  "ConnectionStrings": {
    "DefaultConnection": "<My connection string>"
  }
}
Run Code Online (Sandbox Code Playgroud)

sel*_*ape 5

在 Azure Functions 2+ 中获取配置的方法是IConfiguration,而不是ConfigurationManager。

您可以注入IConfiguration到可能注入其他任何东西的大多数地方,但是在Startup()您需要使用类似此技巧的地方。

IConfiguration将在 Azure 中托管时自动从您的函数应用设置中读取,在local.settings.json本地运行时自动读取。


编辑(参考):

恕我直言,这方面的文档既不清楚也不容易找到。GitHub上也有很多相关的讨论和困惑。

主要来源是Azure Functions 2 中的 DI。在其中,您需要知道的大部分内容几乎很容易被遗漏:

功能主机注册了许多服务。以下服务可以安全地作为应用程序的依赖项:

[...] Microsoft.Extensions.Configuration.IConfiguration[...]

它还在使用选项和设置中说:

应用设置中定义的值在 IConfiguration 实例中可用

主人为你做这件事;您不需要做任何事情,如上所述,它会根据您的托管上下文自动从正确的来源获取设置。