Azure 函数结构
Azure Function Structure
我正在思考我们应该如何构建 Azure 函数。
我喜欢构建响应事件的无服务器、紧凑、单一功能应用程序的想法。
以下是我运行遇到的问题:
- 我有很好的 class 内置在 .NET Standard 2 中的库,可以处理我所有的 "backend needs" 即使用 Cosmos Db、Azure Table 存储、Azure [=49= 处理 CRUD 操作],Redis,Azure 存储。无论我做什么,我都无法将这些 class 库集成到 Azure Functions 项目中。下面有更多详细信息。
- 此外,事实证明,在 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 包附带的旧工具。
我正在思考我们应该如何构建 Azure 函数。
我喜欢构建响应事件的无服务器、紧凑、单一功能应用程序的想法。
以下是我运行遇到的问题:
- 我有很好的 class 内置在 .NET Standard 2 中的库,可以处理我所有的 "backend needs" 即使用 Cosmos Db、Azure Table 存储、Azure [=49= 处理 CRUD 操作],Redis,Azure 存储。无论我做什么,我都无法将这些 class 库集成到 Azure Functions 项目中。下面有更多详细信息。
- 此外,事实证明,在 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 包附带的旧工具。