【问题标题】:Referencing a shared Azure Function from a class library or nuget从类库或 nuget 引用共享的 Azure 函数
【发布时间】:2022-01-06 19:25:51
【问题描述】:

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

我的想法是把函数放在类库中,然后在我的天蓝色函数项目中引用它,但它似乎不起作用。对于我尝试过的每一件事,只会出现我的 azure function 项目中的函数。

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

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

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

  1. 只是添加了一个项目引用,希望它会被识别,但功能没有列出。
  2. 将函数类添加到使用它作为基类的 azure 函数项目中
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");
        }
    }

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

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

也欢迎提出其他方法。

【问题讨论】:

    标签: azure-functions


    【解决方案1】:

    如果您将 &lt;FunctionsInDependencies&gt;true&lt;/FunctionsInDependencies&gt; 添加到您的函数 csproj 中,它将提取在任何依赖程序集中找到的任何函数。

    需要注意的是,必须加载程序集才能使其工作。在下面的示例中,我使用启动来进行无操作调用,该调用会加载包含函数的程序集。

    https://github.com/lukesharmansmith/FuncFromDependency

    【讨论】:

    • 不错的 - 这正是我所需要的
    【解决方案2】:
    • 解决方法之一是在派生类中调用基类的对象,即如果您的解决方案看起来像这样

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

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

    步骤:

    1. 使用 Visual Studio 创建 azure 函数
    2. 添加您的类库引用
    3. 在 azure 上部署您的函数。
    4. 在您的函数项目中(在 startup.cs 中)引用库时无需设置任何 dependency injections,但您可以根据需要使用 DI。

    参考:

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

    【讨论】:

    • 感谢您的建议,但我正在专门研究一种不需要派生项目中的代码的方法。这些方法本身是一个衬垫,但基于注入的服务。目前,项目模板是最接近我想要的解决方案。
    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2023-03-11
    • 2011-02-02
    相关资源
    最近更新 更多