Я не знаю, почему ваш код не работает. Я могу предложить следующее решение, которое я всегда использую:
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 NormalService : INormalService
{
private readonly CJSettings cjSettings;
public NormalService(IOptions<CJSettings> options)
{
this.cjSettings = options.Value ?? throw new ArgumentNullException(nameof(CJSettings));
}
}
Это должно работать. Я проверил это.
ОБНОВЛЕНО
На самом деле ваш код в порядке. Вам просто нужно использовать двоеточия вместо точек в ключевом параметре метода GetSection
:
services.Configure<CJSettings>("Normal", Configuration.GetSection("CJSettings:Normal"));
services.Configure<CJSettings>("WL", Configuration.GetSection("CJSettings:WL"));
services.Configure<CJSettings>("SEG", Configuration.GetSection("CJSettings:SEG"));