.NET Core AppSettings.json - 获取派生项的权利 class

.NET Core AppSettings.json - Get the right class for a derived item

我正在尝试从我的 appsettings.json 中获取参数,它是派生的 classes 的列表。 问题是我不知道如何检索信息并为每个项目创建具有良好 class 的对象。

我的appsettings.json是这样的:

"DiagnosticSettings": {
"Diagnostics": [
  {
    "Type": "Connection",
    "Address": "xxx"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.google.com",
    "IPToCompare": "8.8.8.8"
  },
  {
    "Type": "DNS",
    "DNSAddress": "www.abc.com",
    "IPToCompare": "x.x.x.x"
  }, [...] 
]}

我有一个基地 class :

public class BaseDiagnosticConfig
{
    public string Type { get; set; }
}

并派生出 class 类似 :

public class DNSDiagConfig : BaseDiagnosticConfig
{
    public string DNSAddress { get; set; }
    public string IPToCompare { get; set; }
}

我可以检索包含项目列表的提供程序,如下所示:

var a = Configuration.GetSection("DiagnosticSettings:Diagnostics");

而且我可以得到基数 class 的列表(但这不是我想要的,因为我丢失了所有派生的 classes 信息):

var b = Configuration.GetSection("DiagnosticSettings:Diagnostics").Get<List<BaseDiagnosticConfig>>();

所以有一种方法可以让我的项目很好 class 即使我必须一个一个地检查我的应用程序设置列表中的所有项目或者我只是在做一些事情 impossible/wrong ?

你必须这样做。我给你一个很简单的例子,你可以根据自己的需要使用。

"MySettings": {  
    "Email": "abc@domain.com",   
  }


public class MySettingsModel  
{   
       public string Email { get; set; }  
}

注册

services.Configure<MySettingsModel>(Configuration.GetSection("MySettings"));

在要读取设置的 class 中声明。

private readonly IOptions<MySettingsModel> appSettings; 
public StudentController(IOptions<MySettingsModel> app)  
{  
    appSettings = app;  
}

读取值

var value = appsettings.Value;

参考:https://www.c-sharpcorner.com/article/reading-values-from-appsettings-json-in-asp-net-core/