如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?

Posted

技术标签:

【中文标题】如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?【英文标题】:How to use ConfigurationBuilder staticly in an Azure Function v2 (core)? 【发布时间】:2019-06-11 20:01:07 【问题描述】:

在将 Azure 函数从 v1 移植到 v2 时,配置管理器用于读取 local.settings.json 的方式发生了变化。

之前,我使用下面的代码来启用函数实例之间的redis连接池:

public static class Redis

    /// <summary>
    /// Initializes the REDIS connection.
    /// </summary>
    private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    
        return ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["CacheConnection"]);
        );

    public static IDatabase Database => LazyConnection.Value.GetDatabase();

但是在 v2 中,ConfigurationManager 不再可用,我们必须使用类似的东西:

new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

但是,因为它需要 context,它只在函数运行时可用,所以我们不能创建一个在所有函数之间共享的静态类。是否可以在 Azure Functions v2 中静态读取 app.settings.json?

【问题讨论】:

【参考方案1】:

我们可以使用

var config = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    .Build();
string cacheConnection = config["CacheConnection"];

或者干脆

Environment.GetEnvironmentVariable("CacheConnection");

local.settings.json(也是 Azure 上的应用程序设置)中的值会在函数主机启动时自动注入到 EnvironmentVariables 中。

【讨论】:

以上是关于如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2019 不会调试 Azure Function V2

为什么在Azure Function v2中运行的ClaimsPrincipal中缺少'identityProvider'声明?

Azure Blob Storage V2,来自 Azure Function App 的异常 API 调用,升级后

为啥 Azure Function V2 中很少有 Python 包不支持?

Azure Function v2 引用了 Newtonsoft.Json 版本高于 Microsoft.NET.Sdk.Functions 的项目

Azure B2C:无法从 v2.0 .well-known openid-configuration 检索文档