从 class 库或 nuget 引用共享的 Azure 函数

Referencing a shared Azure Function from a class library or nuget

我正在寻找一种向每个 azure 函数项目添加标准 azure 函数的方法。这是我们环境的要求,所有 API 都有一个健康端点,所以为了保持一致,我想一次编写并多次使用它。

我的想法是将函数放在 class 库中,然后在我的 azure 函数项目中引用它,但它似乎不起作用。对于我尝试过的每件事,只有我的 azure 函数项目中的函数出现。

这是我的共享函数 class,写在单独引用的 class 库中:

    public class HealthEndpointFunctions
    {
        [FunctionName("Health")]
        public async Task<IActionResult> Health(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequest req)
        {
            return new OkResult();
        }
    }

到目前为止我已经尝试过:

  1. 只是添加了一个项目参考,希望它能被识别,但功能没有列出。
  2. 将函数 class 添加到以此为基础的 azure 函数项目 class
public class Function1 : HealthEndpointFunctions
    {
        [FunctionName("Function1")]
        public  async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req)
        {
            return new OkObjectResult("OKely dokely");
        }
    }

...在这种情况下,派生的class中只有Function1可用

我觉得 azure 函数项目中必须有一些配置才能启用此功能,如果确实有可能的话。

也欢迎提出其他方法。

  • 解决方法之一是在派生 class 中调用 Base Class 的对象,即..如果您的解决方案如下所示

    Solution
    │   Base Project
    └───────BaseFunction.cs   
    │   Derived Project
    └───────DerivedFunction.cs
    
    

    在您的 DerivedFunction.cs 中您可以使用 DerivedProject.DerivedFunction.Run()

步骤:

  1. 使用 visual studio
  2. 创建 azure 函数
  3. 添加您的 class 图书馆参考资料
  4. 在 Azure 上部署您的函数。
  5. 在您的函数项目(startup.cs)中引用库时无需设置任何 dependency injections,但您可以根据需要使用 DI。

参考资料:

  1. 这里有一个示例,其中 OP 在定时器触发器函数中调用 HTTP 触发器函数方法。
  2. Multiple Azure App Function in a project

如果您将 <FunctionsInDependencies>true</FunctionsInDependencies> 添加到您的函数 csproj 中,它将拉取在任何依赖程序集中找到的任何函数。

需要注意的是,必须加载程序集才能使其正常工作。在下面的示例中,我使用 startup 进行空操作调用,该调用加载程序集和其中的函数。

https://github.com/lukesharmansmith/FuncFromDependency