dotnet核心配置绑定不起作用

时间:2019-11-26 12:37:17

标签: c# .net-core configuration

我正在尝试从自定义配置源绑定模型,但不会绑定属性,我的类是:

public class Secrets
{
    public string DbConnectionString { get; set; }
}

配置源返回正确的值,并将其序列化为具有以下键值对的字典
 https://i.stack.imgur.com/TB823.png

我启动时的代码是这样的:

 var c = Configuration.GetSection("AWSSecrets").Get<Secrets>();

但是,如果我这样做,DBConnectionString始终为null

var config = new Secrets();
        config.DbConnectionString = Configuration.GetValue<string>("AWSSecrets:dbConnectionString");

然后它挑选出属性,知道为什么我的属性不会自动绑定吗?

2 个答案:

答案 0 :(得分:0)

您需要像这样Get来代替Bind

var secrets = new Secrets();
Configuration.GetSection("AWSSecrets").Bind(secrets);

要访问您的DbConnectionString,只需执行secrets.DbConnectionString

您也可以在startup中执行此操作,并根据需要注入构造函数。

services.Configure<Secrets>(Configuration.GetSection("AWSSecrets"));

答案 1 :(得分:0)

如果您的应用设置如下:

{
   "AWSSecrets":{
                  "DbConnectionString":""
                }
}

首先在启动时注入模型。

 services.Configure<Secrets>(Configuration.GetSection("AWSSecrets"));

并使用Ioptions在任何地方访问它。

 private readonly IOptions<Secrets> _secrets;
 public YourClassContructor(IOptions<Secrets> secrets)
 {
     _secrets=secrets;
     string conStr =_secrets.value.DbConnectionString;
 }     

确保正确注入了您的依赖项。另外,您还需要具有Microsoft.Extensions.Options.ConfigurationExtensions,可以从程序包管理器进行安装。