Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我使用依赖项注入读取Azure函数的应用程序设置时,配置为null_C#_Dependency Injection_Azure Functions_Asp.net Core 2.1 - Fatal编程技术网

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

C# 当我使用依赖项注入读取Azure函数的应用程序设置时,配置为null,c#,dependency-injection,azure-functions,asp.net-core-2.1,C#,Dependency Injection,Azure Functions,Asp.net Core 2.1,我编写了一个Azure函数,它通过一个Gremlin服务器实例连接到CosmosDB数据库。为了创建Gremlin服务器实例,我需要一些保存在local.settings.json中的凭据,以便在本地进行调试,并希望通过依赖项注入检索这些凭据 为此,我创建了一个名为CosmosDBCredentials的自定义类型,向函数应用程序中添加了一个启动类,并向函数中添加了一个构造函数 下面是我新创建的Startup类的代码: namespace FunctionApp1 { public c

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

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

下面是我新创建的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);
                });
        }
    }
}

命名空间函数PP1
{
公共类启动:函数启动
{
公共覆盖无效配置(IFunctionsHostBuilder)
{
builder.Services.AddOptions()
.Configure((设置、配置)=>
{
configuration.GetSection(“CosmosDBCredentials”).Bind(设置);
});
}
}
}
下面是我的函数构造函数的代码,它接收选项作为参数:

    public class Function1
    {
        private readonly CosmosDBCredentials _cosmosDBsettings;

        public Function1(IOptions<CosmosDBCredentials> cosmosDBsettings)
        {
            this._cosmosDBsettings = cosmosDBsettings.Value;
        }
公共类函数1
{
私人只读COSMOSDBC住宅_COSMOSDBS设置;
公共功能1(IOPS宇宙设置)
{
这个._cosmosDBsettings=cosmosDBsettings.Value;
}
当我在本地执行函数时,Startup类在尝试绑定设置时抛出以下异常:

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

配置为空

我很困惑到底是什么原因导致了这一点,因为我一直在关注微软的文档

关于Startup类似乎无法解析IConfiguration的任何线索


我对.NET核心项目和更具体的Azure功能中的依赖注入非常陌生,如果我的理解有误,请毫不犹豫地纠正我。

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

您的代码看起来不错,是不是确保您使用的是各种Azure Functions NuGet软件包的最新版本?一些较旧版本有类似的破坏游戏的错误。此外,您是否看到链接页面底部的“警告”?它可能适用于您的实例,也可能不适用于您的实例(您不指定是在本地调试该函数,还是仅在将其推送到Azure时才进行调试…)谢谢你的反馈。我确实正在本地调试,我将编辑我的问题以添加此信息,这确实很重要。我使用的
Microsoft.NET.Sdk.Functions
软件包的版本是1.0.31。我已经按照下面的建议做了一个小测试项目,它使用3.0.3版本,并且运行良好。我将尝试更新并查看我的测试结果f这就解决了这个问题。所以我重新创建了另一个测试项目,使用ASP.NET Core 2.1和Microsoft.NET.Sdk.Functions 1.0.31版(就像我的大项目一样),这个项目也可以正常工作。所以我想我的问题与我的Azure Functions NuGet软件包无关。我真的很茫然。