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

问题描述

我编写了一个Azure函数,该函数通过Gremlin Server实例连接到CosmosDB数据库。为了创建Gremlin Server实例,我需要保存在local.settings.json中的一些凭据,以便在本地进行调试,并且希望通过依赖项注入进行检索。

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

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


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;
        }

当我在本地执行我的函数时,启动类尝试绑定设置时会引发以下异常:

System.NullReferenceException:'对象引用未设置为 对象的实例。'

配置为空。

我对造成这种情况的原因感到非常困惑,因为我遵循了how work with options and settings上的Microsoft文档。

关于启动类似乎无法解析IConfiguration的任何线索吗?

.NET Core项目中的依赖注入是我的一个新手,更具体地说是Azure函数,如果我的理解是错误的,请随时纠正我。

解决方法

由于@Ian Kemp,我终于找到问题的根源:我使用的是EPPlus NuGet软件包的一个版本,该版本强制Microsoft.Extensions.Configuration更新到3.xx版本,该版本与Azure Functions v2。我重新安装了所有依赖项,这次我选择了一个旧版本的EPPlus NuGet软件包,该软件包依赖于我需要的Microsoft.Extensions.Configuration版本,从而解决了该问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...