C# 未在函数中解析类的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)

我已经为Azure函数设置了DI,但在运行该函数时它将无法解析。我的密码是:

启动

[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();
  }
}