【问题标题】:Can't get list of object from appsettings无法从 appsettings 获取对象列表
【发布时间】:2020-01-15 12:06:03
【问题描述】:

我的应用设置如下所示:

"Tenants": [
  {
    "Id": "00000000-0000-0000-0000-00000000000",
    "ConnectionString": "dbstring"
  },
  {
    "Id": "00000000-0000-0000-0000-00000000001",
    "ConnectionString": "dbstring"
  }
]

还有一个看起来像这样的对象:

public class TenantSecrets
{
    public string ConnectionString { get; set; }
    public Guid Id { get; set; }
}

public class Tenants : List<TenantSecrets> { }

当我尝试像这样配置它们或绑定它们时:

services.Configure<Tenants>(Configuration.GetSection("Tenants"));

var tenants = new Tenants();
Configuration.Bind("Tenants", tenants);

列表总是空的,有谁知道为什么或如何调试它?调试时,我可以在 appsettings 配置阅读器中看到该列表,但该对象似乎从未映射。

【问题讨论】:

  • 仍然产生一个空列表

标签: c# .net-core configuration


【解决方案1】:

好吧,我想通了,原来我用于 Id 的空 guid 比 guid 少一个 0,我现在了解到配置到 poco 映射失败,所以对于其他有问题的人,请检查您的数据是否符合数据类型

【讨论】:

    【解决方案2】:

    编辑: 很好,你发现了这个错误,它恰好可以正常工作。我不想写无用的答案所以这里是使用Options pattern的版本。

    Startup.cs文件中配置Tenants类(方法ConfigureServices

    services.Configure<Tenants>(Configuration.GetSection("Tenants"));
    

    然后,在控制器构造函数中注入IOptions&lt;Tenants&gt; 服务。

    private readonly Tenants _tenants;
    
    public HomeController(IOptions<Tenants> tenantOptions)
    {
        _tenants = tenantOptions.Value;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2019-05-08
      相关资源
      最近更新 更多