我有一个 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]
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
容器已创建