在Azure Function App中全局获取ExecutionContext

时间:2018-10-07 14:05:09

标签: c# azure azure-functions azure-webjobs executioncontext

我有功能Apps,在一个帮助器类中,该类将准备文件并为我存储它,我想读取项目文件

我尝试了许多方法,例如(AppDomain,AppContext等),还有许多其他方法,而且由于它是无服务器的,因此program.cs与运行它的函数位于不同的目录中。我想要的是WebRoot目录。

我发现了这个https://github.com/Azure/azure-functions-host/wiki/Retrieving-information-about-the-currently-running-function 这就是通过使用FunctionAppDirectory给我正确的路径,即wwwroot。

问题是我需要将ExecutionContext传递给run函数,然后需要将其传递给Helper类,我无法直接从helper类中读取它。我在多个地方都有这个。

我如何在应用程序/类之间全局获取此信息。

谢谢。

1 个答案:

答案 0 :(得分:0)

解决问题的一种方法是

  1. 定义一个全局接口:

    public interface IExecutionContext
    {
        Guid InvocationId { get; set; }
        string FunctionName { get; set; }
        string FunctionDirectory { get; set; }
        string FunctionAppDirectory { get; set; }
    }
    
  2. 为Function App添加实现:

    public class FunctionAppExecutionContext : ExecutionContext, IExecutionContext
    {
    }
    
  3. 为Function App添加DI配置(可选):

    services.AddSingleton<IExecutionContext, FunctionAppExecutionContext>();

然后,在您的帮助器类中,使用该接口隐藏实现。在这种情况下,即为Function SDK的ExecutionContext。重复类实现步骤以实现其他库的类。