当我使用依赖注入读取我的 Azure 函数的应用程序设置时,配置为空

Configuration is null when I use Dependency Injection to read the app settings of my Azure Function

我编写了一个 Azure Function,它通过 Gremlin 服务器实例连接到 CosmosDB 数据库。为了创建 Gremlin 服务器实例,我需要一些我保存在 local.settings.json 中的凭据以在本地调试,并且我想通过依赖注入检索这些凭据。

为此,我创建了一个名为 CosmosDBCredentials 的自定义类型,我在我的函数应用程序中添加了一个 Startup class,并且我在我的函数中添加了一个构造函数。

这是我新创建的 Startup class 的代码:


namespace FunctionApp1
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddOptions<CosmosDBCredentials>()
                .Configure<IConfiguration>((settings, configuration) =>
                {
                    configuration.GetSection("CosmosDBCredentials").Bind(settings);
                });
        }
    }
}

这是接收选项作为参数的函数构造函数的代码:

    public class Function1
    {
        private readonly CosmosDBCredentials _cosmosDBsettings;

        public Function1(IOptions<CosmosDBCredentials> cosmosDBsettings)
        {
            this._cosmosDBsettings = cosmosDBsettings.Value;
        }

当我在本地执行函数时,Startup class 在尝试绑定设置时抛出以下异常:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

configuration was null.

我对造成这种情况的原因感到很困惑,因为我已经严格按照 how work with options and settings 上的 Microsoft 文档进行操作。

关于为什么 Startup class 似乎无法解析 IConfiguration 的任何线索?

我对 .NET Core 项目中的依赖注入非常陌生,更具体地说是 Azure Functions,如果我的理解有误,请随时纠正我。

感谢@Ian Kemp,我终于找到了我的问题所在:我使用的 EPPlus NuGet 包版本强制 Microsoft.Extensions.Configuration 更新到 3.x.x 版本,这与 Azure Functions v2 不兼容。我重新安装了所有依赖项,这次我选择了旧版本的 EPPlus NuGet 包,它依赖于我需要的 Microsoft.Extensions.Configuration 版本,这解决了问题。