web-dev-qa-db-ja.com

Azure Function IWebJobsStartup実装のExecutionContext

設定を正しく設定できるように、Functions StartupクラスのExecutionContext.FunctionAppDirectoryにアクセスする方法。次のスタートアップコードを参照してください。

[Assembly: WebJobsStartup(typeof(FuncStartup))]
namespace Function.Test
{
    public class FuncStartup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            var config = new ConfigurationBuilder()
               .SetBasePath(“”/* How to get the Context here. I cann’t DI it 
                           as it requires default constructor*/)
               .AddJsonFile(“local.settings.json”, true, reloadOnChange: true)
               .AddEnvironmentVariables()
               .Build();

        }
    }
 }
10
Soma Yarlagadda

Azure関数が実際の関数呼び出しをまだ処理していないため、ExecutionContextがありません。しかし、それも必要ありません-local.settings.jsonは自動的に解析されて環境変数に変換されます。

本当にディレクトリが必要な場合は、%HOME%/site/wwwroot Azureで、ローカルで実行する場合はAzureWebJobsScriptRoot。これはFunctionAppDirectoryと同等です。

This もこのトピックに関する良い議論です。

    public void Configure(IWebJobsBuilder builder)
    {
        var local_root = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot");
        var Azure_root = $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";

        var actual_root = local_root ?? Azure_root;

        var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
            .SetBasePath(actual_root)
            .AddJsonFile("SomeOther.json")
            .AddEnvironmentVariables()
            .Build();

        var appInsightsSetting = config.GetSection("APPINSIGHTS_INSTRUMENTATIONKEY");
        string val = appInsightsSetting.Value;
        var helloSetting = config.GetSection("hello");
        string val = helloSetting.Value;

        //...
    }

Local.settings.jsonの例:

{
  "IsEncrypted": false,
  "Values": {
    "APPINSIGHTS_INSTRUMENTATIONKEY": "123456..."
  }
}

例SomeOther.json

{
  "hello":  "world"
}
11
Alex AIT

以下のコードを使用してください、それは私のために働きました。

var executioncontextoptions = builder.Services.BuildServiceProvider()
         .GetService<IOptions<ExecutionContextOptions>>().Value;

var currentDirectory = executioncontextoptions.AppDirectory;

configuration = configurationBuilder.SetBasePath(currentDirectory)
          .AddJsonFile(ConfigFile, optional: false, reloadOnChange: true)    
          .Build();
7
Vamshi CH