gpt4 book ai didi

c# - .NET Core 2.2 Azure Function v2 依赖注入(inject)

转载 作者:太空狗 更新时间:2023-10-29 18:24:22 25 4
gpt4 key购买 nike

我在使用 Microsoft.Extensions.DependencyInjection 注册单例时遇到问题.我创建了一个 Startup类(绝对有效)并创建了一个 ITestService与实现。

单例被注入(inject)到函数的构造函数中。最初我对这个实现没有任何问题,但是,几天后该函数失败了,因为它无法解析 ITestService .我不知道为什么。

这里是 Startup

using Microsoft.Azure.WebJobs.Hosting;

[assembly: WebJobsStartup(typeof(Startup))]
namespace Test.Functions
{
using System;

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", true, true)
.AddEnvironmentVariables()
.Build();

builder.Services.AddSingleton<ITestService>(new TestService("test string"));
}
}
}

这是函数

public class TestFunction
{
private readonly ITestService testService

public TestFunction(ITestService testService)
{
this.testService = testService ?? throw new ArgumentNullException(nameof(testService));
}

[FunctionName(nameof(TestFunction))]
public void Run([ServiceBusTrigger("test", Connection = "ServiceBusConnection")]Message message, ILogger log)
{
////use test service here
}
}

当我调试启动并查看 Services 时我看到实现类型是 null对于 ITestService ,我认为这就是它无法解决的原因。就像我提到的那样,这完全有效了几天。功能的版本等没有改变。将不胜感激任何关于如何让这项工作再次运作的想法。

更新

我试图进一步简化这一点,并创建了另一个虚拟接口(interface),其实现具有无参数构造函数。我添加它使用: builder.AddSingleton<ITestService2, TestService2>()

它显然将类型分配给了实现类型,但是当需要将它注入(inject)到构造函数中时,它失败了,同样无法激活异常。

最佳答案

最新版本的函数宿主中存在回归,已破坏依赖注入(inject)。

为了在 Azure 环境中解决此问题,您可以通过将 FUNCTIONS_EXTENSION_VERSION 应用程序设置设置为 2.0.12342.0 来锁定功能主机的特定版本。

如果您使用 azure-functions-core-tools 在本地运行函数主机NPM 包,请务必使用 2.4.419 作为最新版本 (2.4.498) 导致相同的问题。您可以使用以下内容显式安装它:

npm i -g azure-functions-core-tools@2.4.419

查看此 GitHub issue了解更多背景。

关于c# - .NET Core 2.2 Azure Function v2 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55377996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com