【发布时间】:2023-03-03 01:28:01
【问题描述】:
我在使用 Microsoft.Extensions.DependencyInjection 注册单身人士时遇到问题。我创建了一个Startup 类(肯定可以工作)并创建了一个带有实现的ITestService。
单例被注入到函数的构造函数中。最初我对此实现没有任何问题,但是,几天后该函数失败,因为它无法解析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 时,我看到ITestService 的实现类型是null,我认为这就是它无法解决的原因。就像我提到的那样,这完全工作了几天。功能版本等没有改变。任何如何让这项工作再次发挥作用的想法将不胜感激。
更新
我试图进一步简化这一点,并创建了另一个具有无参数构造函数的实现的虚拟接口。我使用以下方法添加了它:
builder.AddSingleton<ITestService2, TestService2>()
它显然将类型分配给实现类型,但是当将其注入构造函数时它失败了,同样无法激活异常。
【问题讨论】:
-
你用 services.BuildServiceProvider() 试过了吗
-
@Azzy 我确实尝试过,但没有解决问题。
标签: c# .net-core azure-functions