C# 未在函数中解析类的DI
我已经为Azure函数设置了DI,但在运行该函数时它将无法解析。我的密码是: 启动:C# 未在函数中解析类的DI,c#,azure-functions,C#,Azure Functions,我已经为Azure函数设置了DI,但在运行该函数时它将无法解析。我的密码是: 启动: [assembly: FunctionsStartup(typeof(OmegaConnector.StartUp))] namespace OmegaConnector { public class StartUp : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder)
[assembly: FunctionsStartup(typeof(OmegaConnector.StartUp))]
namespace OmegaConnector
{
public class StartUp : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
builder.Services.AddLogging();
builder.Services.AddVehicleSearchCosmosDataProvider();
builder.Services.AddScoped<IProcessSearchData, SearchProcessor>(); <- This one
}
}
对不起,如果这太简单了,但我只是看不出我这里有什么错。我想我的设置是正确的,但我显然没有。有人能看到我需要做什么吗?根据我对问题的理解,可能需要将服务注入到包含函数的类中 我不确定这是否是您从提供的代码示例中所做的。这方面的一个例子是:
公共类OmegaConnectorFunction
{
专用只读ILogger\u记录器;
专用只读IPProcessSearchData\u searchProcessor;
公用OmegaConnectorFunction(ILogger记录器、IPProcessSearchData searchProcessor)
{
_记录器=记录器;
_searchProcessor=searchProcessor;
}
[函数名(“OmegaConnectorFunction”)]
公共异步任务运行([HttpTrigger]HttpRequest请求)
{
var campaign=wait request.Content.ReadAsAsync();
_searchProcessor.ProcessData(活动);
返回新的OkResult();
}
}
公共类OmegaConnectorFunction{
专用只读IPProcessSearchData\u searchProcessor;
公共OmegaConnectorFunction(IPProcessSearchData searchProcessor)
{
_searchProcessor=searchProcessor;
}
[函数名(“OmegaConnectorFunction”)]
公共异步任务运行([HttpTrigger]HttpRequest请求,ILogger日志)//ILogger自动导入
{
var campaign=wait request.Content.ReadAsAsync();
_searchProcessor.ProcessData(活动);
返回新的OkResult();
}
}
请看这里:
Functions 3.x软件包是在考虑.NET Core 3.1的基础上构建的
请尝试保持这些版本的同步,以便不存在依赖项兼容性问题。您使用的是哪个.NET Core版本?您使用的是什么版本的NuGet Azure函数包?你更新了吗?Microsoft.NETCore.App->2.1.0 Microsoft.NET.Sdk.Functions->3.07没有。我还没有更新任何内容。请尝试将NETCore升级到3.1?@TomH谢谢。我编辑了项目文件并将targetframework从2.1更改为3.1,我不再有此问题。但我不完全理解,因为当我运行该函数时,运行时版本仍然报告为2.x。如果你给我一个答案,我会接受你的建议。很高兴它解决了问题!我认为这是不对的,因为我的类不是我注入到其他地方的函数。但是,在本例中,我尝试注入的类位于function类中OmegaConnectorFunction@onesixtyfourth我很好奇-这个答案对你不起作用?如果没有,您将不得不扩展示例代码,因为这正是我要做的。谢谢@TomH,这为我节省了很多时间。
public interface IProcessSearchData
{
Task<bool> ProcessData(string campaign);
}
public class SearchProcessor : IProcessSearchData
{
public async Task<bool> ProcessData(string campaign)
{
return true;
}
}
public OmegaConnectorFunction(ILogger<OmegaConnectorFunction> logger, IProcessSearchData searchProcessor)
{
Executed 'CatchCampaign' (Failed, Id=daef3371-fa4d-4d1f-abad-7ad343537872)
[27/05/2020 12:17:27] Microsoft.Extensions.DependencyInjection.Abstractions: Unable to resolve service for type 'OmegaConnector.Interfaces.IProcessSearchData' while attempting to activate 'OmegaConnector.OmegaConnectorFunction'.
public class OmegaConnectorFunction {
private readonly IProcessSearchData _searchProcessor;
public OmegaConnectorFunction(IProcessSearchData searchProcessor)
{
_searchProcessor = searchProcessor;
}
[FunctionName("OmegaConnectorFunction")]
public async Task<IActionResult> Run([HttpTrigger] HttpRequest request, ILogger log) // ILogger is automatically imported
{
var campaign = await request.Content.ReadAsAsync<string>();
_searchProcessor.ProcessData(campaign);
return new OkResult();
}
}