Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Azure函数应用程序中全局获取ExecutionContext_C#_Azure_Azure Functions_Azure Webjobs_Executioncontext - Fatal编程技术网

C# 在Azure函数应用程序中全局获取ExecutionContext

C# 在Azure函数应用程序中全局获取ExecutionContext,c#,azure,azure-functions,azure-webjobs,executioncontext,C#,Azure,Azure Functions,Azure Webjobs,Executioncontext,我有函数应用程序,在一个助手类中,它将为我准备一个文件并存储它,我想读取项目文件 我尝试了许多方法,例如(AppDomain、AppContext等)和其他许多方法,由于它是无服务器的,program.cs与它运行的函数位于不同的目录。我想要的是WebRoot目录 我找到了这个 这给了我想要的正确路径,通过使用FunctionAppDirectory的wwwroot 问题是我需要将ExecutionContext传递给run函数,然后我需要将它传递给Helper类,我无法直接从Helper类读取

我有函数应用程序,在一个助手类中,它将为我准备一个文件并存储它,我想读取项目文件

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

我找到了这个 这给了我想要的正确路径,通过使用FunctionAppDirectory的wwwroot

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

如何在整个应用程序/类中实现这一点


谢谢。

解决问题的一个方法是

  • 定义全局接口:

    public interface IExecutionContext
    {
        Guid InvocationId { get; set; }
        string FunctionName { get; set; }
        string FunctionDirectory { get; set; }
        string FunctionAppDirectory { get; set; }
    }
    
  • 添加功能应用程序的实现:

    public class FunctionAppExecutionContext : ExecutionContext, IExecutionContext
    {
    }
    
  • 为功能应用程序添加DI配置(可选):

    services.AddSingleton()


  • 然后,在助手类中,使用接口隐藏实现。在本例中,它是函数SDKs ExecutionContext。重复类实现步骤,为其他库实现类。

    是的,回答得很好,我知道我可以做到,但问题是函数应用程序没有启动类program.cs。例如,它是一种无服务器类型的应用程序。我不确定应该在哪里添加服务。AddSinletony您需要将DI实现为自定义解决方案,例如,或者干脆跳过它(这就是我将其标记为可选的原因)。您可以从ExecutionContext创建FunctionAppExecutionContext类型的新实例,或使用AutoMapper等进行映射,并将该接口作为辅助类中的参数类型(无论是否为静态)。