Logic Apps标准工作流调用本地函数时无法解析ILoggerFactory服务
解决Logic Apps标准工作流调用本地函数时的ILoggerFactory解析异常
你遇到的异常是因为函数类构造函数中注入的ILoggerFactory未被运行时正确解析,以下是具体解决方案:
方案1:直接注入ILogger替代ILoggerFactory
Functions运行时原生支持直接注入ILogger<T>,无需通过ILoggerFactory手动创建日志实例,修改后的函数代码如下:
namespace NS.Integration.ProcessManager.Function { using System; using System.Threading.Tasks; using Azure.Identity; using Azure.Messaging.ServiceBus; using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Extensions.Workflows; using Microsoft.Azure.WebJobs; public class SvcBusQReader(ILogger<SvcBusQReader> logger) { private readonly ILogger<SvcBusQReader> _logger = logger; [FunctionName("ReadQueueSessionMessage")] public async Task<string> Run([WorkflowActionTrigger] string queueName, string sessionId) { var serviceBusNamespace = Environment.GetEnvironmentVariable("serviceBus_fullyQualifiedNamespace"); if (string.IsNullOrEmpty(serviceBusNamespace)) { throw new InvalidOperationException("Service Bus namespace is not configured."); } var credential = new DefaultAzureCredential(); var client = new ServiceBusClient(serviceBusNamespace, credential); var receiverOptions = new ServiceBusSessionReceiverOptions { ReceiveMode = ServiceBusReceiveMode.PeekLock }; var receiver = await client.AcceptSessionAsync(queueName, sessionId, receiverOptions); if (receiver == null) { throw new InvalidOperationException($"No session found with ID: {sessionId}"); } var message = await receiver.ReceiveMessageAsync(); if (message == null) { throw new InvalidOperationException($"No message found in session with ID: {sessionId}"); } string messageBody = message.Body.ToString(); await receiver.CompleteMessageAsync(message); return messageBody; } } }
方案2:确保依赖注入服务正确注册(若坚持使用ILoggerFactory)
如果必须保留ILoggerFactory注入,需在函数项目的Program.cs中确认日志服务已正确注册(.NET Isolated Functions默认已包含,但自定义配置时需确保):
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(services => { // 确保日志服务注册,默认ConfigureFunctionsWorkerDefaults已包含此配置 services.AddLogging(); }) .Build(); host.Run();
检查NuGet包依赖
确认项目安装了匹配版本的核心NuGet包:
Microsoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.Extensions.LoggingMicrosoft.Azure.Functions.Extensions.Workflows
可通过以下命令安装或更新:
dotnet add package Microsoft.Azure.Functions.Worker dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Logging dotnet add package Microsoft.Azure.Functions.Extensions.Workflows
内容的提问来源于stack exchange,提问作者Rob Bowman
相关产品推荐
相关产品推荐

