Azure 函数结构

Azure Function Structure

我正在思考我们应该如何构建 Azure 函数。

我喜欢构建响应事件的无服务器、紧凑、单一功能应用程序的想法。

以下是我运行遇到的问题:

  1. 我有很好的 class 内置在 .NET Standard 2 中的库,可以处理我所有的 "backend needs" 即使用 Cosmos Db、Azure Table 存储、Azure [=49= 处理 CRUD 操作],Redis,Azure 存储。无论我做什么,我都无法将这些 class 库集成到 Azure Functions 项目中。下面有更多详细信息。
  2. 此外,事实证明,在 Azure Functions 项目中进行依赖项注入是一项艰巨的任务——尤其是对于我上面提到的 class 库。

此时,我看到的唯一选择是 "copy and paste" 编码到一个新的 Azure Functions 项目中并在没有任何 DI 的情况下使用它。

这似乎违背了"best practices"。那么,除了创建整体代码或等到 Azure Functions 支持 .NET Core 和 DI 之外,还有什么解决方案。

我认为我可以使用我的 .NET Standard class 库,这些库来自针对 .NET Framework 的常规 Azure Functions 项目。毕竟,.NET Standard 的理念是 "standardize" 东西。我在 SO 上开了几个帖子。我提供了链接,以便您可以看到我 运行 进入的问题:

No parameterless constructor error in WebJobs with .NET Core and Ninject

P.S。我以前的帖子是指 WebJobs。这是 B 计划方法,因为在支持 .NET Core 和 DI 等方面,WebJobs 似乎比 Azure Functions 领先半步。最后,我想构建一些 Azure Functions,它们可以使用我在 .NET Standard 2 中构建的 class 库。

此外,我以前的帖子提到我的 class 库以 .NET Core 2.0 为目标。从那时起,我将它们转换为 .NET Standard 2,这并没有花太多时间。我这样做是为了真正符合 .NET Standard 2。

.NET Standard 2 支持正在进行中,请参阅 this github issue.

一个问题是 Visual Studio 的 Functions Core 工具版本已过时。在解决此问题之前,您可以通过以下方式解决:

  • 通过 运行ning npm install -g azure-functions-core-tools
  • 通过 npm 安装最新版本
  • 在 VS 的函数应用程序中,转到属性
  • 转到“调试”,然后单击“配置文件”下的“新建...”
  • 将新配置文件命名为 FunctionsNpm
  • 将可执行文件设置为(替换[YourUserName]):C:\Users\[YourUserName]\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.exe
  • 将参数设置为 host start
  • 将工作目录设置为$(TargetDir)
  • 在工具栏中,找到绿色三角形图标,将您当前的配置文件更改为您刚创建的配置文件:

现在当您 运行 来自 VS 时,您将使用 npm 工具而不是 VS 包附带的旧工具。