如何在 Azure Cosmos DB 触发器函数中检索基础值为布尔值的环境变量?

问题描述 投票:0回答:1

我有一个 Azure Function App(>=4.0 版本),它具有 Azure Cosmos 函数。

我正在从环境中检索 CreateLeaseContainerIfNotExists 参数的值。 在 Program.cs 中,我将其检索到 builder.Services().Bind() 函数中。

AppConfigClass 是:

     public class AppConfigValues
     {
          public const string AppName = "BoundedContextSolution.Aggregate1NameSpace.IntegrationEventPublisher";

          public bool? CreateLeaseContainerIfNotExists { get; set; } = false;
      }

在函数本身中,我想从名称为 AppConfigValues.AppName 的环境变量中检索 CreateLeaseContainerIfNotExists 的值加上 CreateLeaseContainerIfNotExists 将为“BoundedContextSolution.Aggregate1NameSpace.IntegrationEventPublisher.CreateLeaseContainerIfNotExists”。

  public static void Run([CosmosDBTrigger(
        databaseName: "databaseName",
        containerName: "containerName",
        Connection = "",
        LeaseContainerName = "leases",
        CreateLeaseContainerIfNotExists = true)] IReadOnlyList<ToDoItem> input, 
        ILogger log]
c# asp.net azure azure-eventgrid c#-12.0
1个回答
0
投票

CosmosDB
触发器不允许使用诸如
CreateLeaseContainerIfNotExists
databaseName
containerName
LeaseContainerName
Connection
等属性的运行时值,因为这些属性参数是在编译时设置的。

我们可以在环境变量中定义

databaseName
containerName
LeaseContainerName
的值。使用
"%<variable_name>%"
Connection
已经从环境变量中获取值。

但是

CreateLeaseContainerIfNotExists
需要布尔值,不能使用字符串值定义。

默认情况下

CreateLeaseContainerIfNotExists
设置为
false

如果设置为

true
,如果没有可用的名称在
LeaseContainerName
中定义的容器,它将创建租赁容器。但如果容器已经存在,那么它会跳过此步骤并使用预先存在的容器。

using System;
using System.Collections.Generic;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace FunctionApp5
{
    public class Function1
    {
        private readonly ILogger _logger;

        public Function1(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<Function1>();
        }

        [Function("Function1")]
        public void Run([CosmosDBTrigger(
            databaseName: "ToDoList",
            containerName: "Items",
            Connection = "cosmosconn",
            LeaseContainerName = "Test",
            CreateLeaseContainerIfNotExists = true)] IReadOnlyList<MyDocument> input)
        {
            if (input != null && input.Count > 0)
            {
                _logger.LogInformation("Documents modified: " + input.Count);
                _logger.LogInformation("First document Id: " + input[0].id);
            }
        }
    }

    public class MyDocument
    {
        public string id { get; set; }

        public string Text { get; set; }

        public int Number { get; set; }

        public bool Boolean { get; set; }
    }
}

OUTPUT

Test
容器已创建

© www.soinside.com 2019 - 2024. All rights reserved.