Azure Function v2 - 如何将配置加载为singelton?

sil*_*ent 4 azure azure-functions

我正在将Azure功能从v1(.NET 4.7)迁移到v2(.NET Standard 2).在v1版本中,我使用了一些静态变量,我从配置中读取这些变量以获得单个(Cosmos DB客户端)

private static string cosmosDbUri = ConfigurationManager.AppSettings["CosmosDb.Uri"];
//...
private static MyCosmosDbClient cosmosDbClient = new MyCosmosDbClient(cosmosDbUri, ...);
Run Code Online (Sandbox Code Playgroud)

对于v2,我会切换到配置的ConfigurationBuilder:

private static IConfigurationRoot config = new ConfigurationBuilder()
                .SetBasePath(context.FunctionAppDirectory)
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();
Run Code Online (Sandbox Code Playgroud)

现在有一个问题就是需要ExecutionContext,我只能在执行函数时获得(或知道如何获取).

所以我的问题是,如何解决这个问题?构建一个Init(ExecutionContext context)方法,我只会在配置尚未加载时调用,或者有更好的方法来执行此操作?

Mik*_*kov 11

您可以替换context.FunctionAppDirectory使用Environment.CurrentDirectory.

至少,它在本地local.settings.json工作,而这正是你需要工作的地方,所以这个改变应该是安全的.