繁体   English   中英

.NET Core AppSettings.json - 为派生项目获取正确的 class

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

我正在尝试从我的 appsettings.json 获取参数,这是派生类的列表。 问题是我不知道如何检索信息并使用良好的 class 为每个项目创建 object。

我的 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; }
}

和派生类,如:

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

我可以使用以下内容检索包含项目列表的提供程序:

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

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

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

所以有一种方法可以让我的项目得到很好的 class 即使我必须逐个检查我的 appsettings 列表中的所有项目,或者我只是在做一些不可能/错误的事情?

你必须这样做。 我为您提供了一个非常简单的示例,您可以根据自己的要求使用。

"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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM