C# 无法使用Asp.Net Core 3中的命名选项读取/绑定强类型类的配置设置

C# 无法使用Asp.Net Core 3中的命名选项读取/绑定强类型类的配置设置,c#,asp.net-core,.net-core,appsettings,C#,Asp.net Core,.net Core,Appsettings,我无法使用命名选项将appsettings.json中的配置设置绑定到强类型类 appsettings.json "CJSettings": { "Normal": { "CSSUrl": "https://css.mydomain.com/main.min.css", "LogoName": "mysite-logo.png" }, "WL": { "CSSUrl": "https://css.mydomain.com/main_wl

我无法使用命名选项将appsettings.json中的配置设置绑定到强类型类

appsettings.json

"CJSettings": {
    "Normal": {
      "CSSUrl": "https://css.mydomain.com/main.min.css",
      "LogoName": "mysite-logo.png"
    },
    "WL": {
      "CSSUrl": "https://css.mydomain.com/main_wl.min.css",
      "LogoName": "mysite-WL-logo.png"
    },
    "SEG": {
      "CSSUrl": "https://css.mydomain.com/main_seg.min.css",
      "LogoName": "mysite-seg-logo.png"
    }}
CJSettings.cs

public class CJSettings
{
    public string CSSUrl { get; set; }
    public string LogoName { get; set; }
}
Startup.cs

services.Configure<CJSettings>("Normal", configuration.GetSection("CJSettings.Normal"));
services.Configure<CJSettings>("WL", configuration.GetSection("CJSettings.WL"));
services.Configure<CJSettings>("SEG", configuration.GetSection("CJSettings.SEG"));
services.Configure(“正常”,configuration.GetSection(“CJSettings.Normal”);
services.Configure(“WL”,configuration.GetSection(“CJSettings.WL”);
services.Configure(“SEG”,configuration.GetSection(“CJSettings.SEG”);
NormalService.cs

我正在尝试使用名称读取配置数据的服务。但是没有成功

public class NormalService : INormalService
{
    private readonly CJSettings cjSettings;

    public NormalService(IOptionsMonitor<CJSettings> options)
    {
        this.cjSettings = options.Get("Normal");    //getting null values for both properties
    }
}
公共类正常服务:INormalService
{
私人只读设置;
公共正常服务(IOptionsMonitor选项)
{
this.cjSettings=options.Get(“Normal”);//获取两个属性的空值
}
}
正如您在上面所看到的,我尝试使用名称“Normal”读取数据,但得到了CJSettings对象的两个属性的空值


请帮我修一下这个。。。谢谢

我不知道你的代码为什么不起作用。我可以建议我经常使用的以下解决方案:

public class CJSettings
{
    public UrlSettings Normal { get; set; }
    public UrlSettings WL { get; set; }
    public UrlSettings SEG { get; set; }
}

public class UrlSettings
{
    public string CSSUrl { get; set; }
    public string LogoName { get; set; }
}
注册选项和服务:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CJSettings>(Configuration.GetSection(nameof(CJSettings)));
        services.AddTransient<INormalService, NormalService>();

        // the rest of your code
    }

我不知道你的代码为什么不起作用。我可以建议我经常使用的以下解决方案:

public class CJSettings
{
    public UrlSettings Normal { get; set; }
    public UrlSettings WL { get; set; }
    public UrlSettings SEG { get; set; }
}

public class UrlSettings
{
    public string CSSUrl { get; set; }
    public string LogoName { get; set; }
}
注册选项和服务:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CJSettings>(Configuration.GetSection(nameof(CJSettings)));
        services.AddTransient<INormalService, NormalService>();

        // the rest of your code
    }

是的,这就是我错过的。我从来没有注意到我用的是圆点。谢谢mcuh@Dmitry的帮助。:)是的,这就是我错过的。我从来没有注意到我用的是圆点。谢谢mcuh@Dmitry的帮助。:)