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

标签 c# azure .net-core azure-functions

将 Azure Function 从 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();

但是,因为它需要仅在函数运行时可用的上下文,所以我们无法创建在所有函数之间共享的静态类。是否可以在 Azure Functions v2 中静态读取 app.settings.json?

最佳答案

我们可以使用

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

或者简单地

Environment.GetEnvironmentVariable("CacheConnection");

local.settings.json中的值(以及 Azure 上的应用程序设置)会在函数主机启动时自动注入(inject)到环境变量中。

关于c# - 如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238992/

相关文章:

deployment - .NET Core 独立部署 (SCD) 在一个文件中

c# - 动态删除菜单项 : Dispose calls Remove

c# - FileStream 和创建文件夹

c# - Delegate 不包含 .net core 中 CreateDelegate 的定义

azure - Access 链接表 - 无需保存密码即可登录

macos - 在 mac os 上运行 azure 时 Node.js 异常 201

c# - 使用 LINQ 在 C# 中获取 List<> 元素位置

c# - 如何从 Lua/MoonSharp 脚本调用和等待异步 C# 方法?

c# - NTLM 身份验证。无法让它在 IHttpModule 中工作。 AcceptSecurityContext 总是失败

azure - 在 AAD 应用程序注册中显示与托管服务身份服务主体关联的应用程序