【问题标题】:Getting ExecutionContext Globally in Azure Function App在 Azure Function App 中全局获取 ExecutionContext
【发布时间】:2018-10-07 14:05:08
【问题描述】:

我有功能应用程序,在一个准备文件并为我存储的帮助类中,我想读取项目文件

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    解决问题的一种方法是

    1. 定义一个全局接口:

      public interface IExecutionContext
      {
          Guid InvocationId { get; set; }
          string FunctionName { get; set; }
          string FunctionDirectory { get; set; }
          string FunctionAppDirectory { get; set; }
      }
      
    2. 为函数应用添加实现:

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

      services.AddSingleton<IExecutionContext, FunctionAppExecutionContext>();

    然后,在您的辅助类中,使用接口隐藏实现。在这种情况下,它是 Functions SDKs ExecutionContext。重复类实现步骤以实现其他库的类。

    【讨论】:

    • 是的,很好的答案,我知道我可以这样做,但问题是功能 App 没有像 program.cs 那样的启动类,例如,它是一种无服务器类型的应用程序。我不确定应该在哪里添加 services.AddSinleton
    • 您需要将 DI 实现为自定义解决方案,例如 mcguirev10.com/2018/04/03/…,或者完全跳过它(这就是我将其标记为可选的原因)。您可以从 ExecutionContext 创建或使用 AutoMapper 等映射类型 FunctionAppExecutionContext 的新实例,并将接口作为辅助类中的参数类型,无论是否静态。
    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多