dotnet核心配置绑定不起作用

问题描述 投票:0回答:2

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

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");

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

c# .net-core configuration
2个回答
0
投票

代替Get,您需要像这样Bind

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

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

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

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

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,可以从程序包管理器进行安装。

© www.soinside.com 2019 - 2024. All rights reserved.