我已经为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
}
}
IProcessSearchData:
public interface IProcessSearchData
{
Task<bool> ProcessData(string campaign);
}
SearchProcessor:
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'.
很抱歉,如果这太简单了,但是我看不到我在哪里错了。我认为我已经正确设置了此设置,但显然没有。谁能看到我需要做什么?
答案 0 :(得分:1)
据我对documentation provided by Microsoft的了解,问题可能是该服务需要注入到包含该函数的类中。
我不确定这是否是您从提供的代码示例中所做的。一个例子是:
public class OmegaConnectorFunction
{
private readonly ILogger _logger;
private readonly IProcessSearchData _searchProcessor;
public OmegaConnectorFunction(ILogger<OmegaConnectorFunction> logger, IProcessSearchData searchProcessor)
{
_logger = logger;
_searchProcessor = searchProcessor;
}
[FunctionName("OmegaConnectorFunction")]
public async Task<IActionResult> Run([HttpTrigger] HttpRequest request)
{
var campaign = await request.Content.ReadAsAsync<string>();
_searchProcessor.ProcessData(campaign);
return new OkResult();
}
}
答案 1 :(得分:1)
查看此处:https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library
Functions 3.x软件包在构建时考虑了.NET Core 3.1。
尝试使这些版本保持同步,这样就不会出现依赖项兼容性问题。
答案 2 :(得分:0)
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(); } }