尝试在 Azure 函数中使用依赖注入时出现奇怪的异常

Pur*_*ome 10 dependency-injection .net-core asp.net-core azure-functions

给定 File->New->Azure Functions v2 App,我试图获取对 anILoggerFactoryILogger<T>.

StartUp.cs在函数应用程序启动时运行的类中执行此操作。

鉴于以下代码,抛出了一个奇怪的异常:

var serviceProvider = builder.Services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();         
Run Code Online (Sandbox Code Playgroud)

除了以下情况:

在此处输入图片说明

 A host error has occurred
[27/02/2019 8:21:22 AM] Microsoft.Extensions.DependencyInjection: Unable to resolve service for type 'Microsoft.Azure.WebJobs.Script.IFileLoggingStatusManager' while attempting to activate 'Microsoft.Azure.WebJobs.Script.Diagnostics.HostFileLoggerProvider'.
Value cannot be null.
Parameter name: provider
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

完整的测试仓库/代码可以在 GitHub 上找到

Hen*_*ema 5

在您创建依赖注入容器并尝试解析 StartUp 类中的记录器时,似乎尚未设置IFileLoggingStatusManager所需的某些基础结构(例如)HostFileLoggerProvider。我认为您应该将日志记录延迟到应用程序完全启动之后。

如果您查看 WebJobs 的启动代码,您会看到首先添加记录器,然后执行外部启动,最后添加所需的日志记录服务。对于您的情况,哪个顺序是错误的。

  • Henk:您知道这种情况的解决方法吗?我希望能够将 ILogger 注入到启动中引导的依赖项(builder.Services.AddSingleton...),最好作为我的 Azure 函数中启动的一部分 (8认同)