gpt4 book ai didi

c# - 继承 .NET Core 中的 appsettings.json 设置

转载 作者:行者123 更新时间:2023-11-30 18:17:02 25 4
gpt4 key购买 nike

我正在努力实现这样的目标:

  • BaseSettings - 具有所有其他部分通用的设置
  • Child1Settings - 具有所有 BaseSettings + Child1Settings
  • Child2Settings - 具有所有 BaseSettings + Child2Settings

    [...]

  • ChildNSettings - 具有所有 BaseSettings + ChildNSettings

那么我会在我的 Controller 中有这个:

public class Child1Controller : Controller
{
public Child1Controller(Child1Settings settings)
{
// settings.BaseSetting and settings.Child1Setting should both be accessible here
}
}

我已经试过了:

public class BaseSettings
{
public string BaseSetting { get; set; }
}

public class Child1Settings : BaseSettings
{
public string Child1Setting { get; set; }
}

appsettings.json

{
"BaseSettings": {
"BaseSetting": "BaseSettingValue"
},
"Child1Settings": {
"Child1Setting": "Child1SettingValue"
}
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<Child1Settings>(options => Configuration.GetSection("Child1Settings").Get<Child1Settings>());
services.AddSingleton(Configuration);
}

这会很好地填充 Child1Settings 字段,但不会填充 BaseSettings 字段。我可以看到这个工作(虽然我没有尝试过),但这感觉很荒谬,如果我有很多子设置类,会导致很多冗余和潜在的错误:

appsettings.json

{
"Child1Settings": {
"BaseSettings": {
"BaseSetting": "BaseSettingValue"
}
"Child1Setting": "Child1SettingValue"
},
"Child2Settings": {
"BaseSettings": {
"BaseSetting": "BaseSettingValue"
}
"Child2Setting": "Child2SettingValue"
}
}

最佳答案

实现此目的的一种方法是为您的 child 配置基础部分数据,然后为其配置特定于 child 的数据,如下所示:

services.Configure<Child1Settings>(hostContext.Configuration.GetSection("BaseSettings"));
services.Configure<Child1Settings>(hostContext.Configuration.GetSection("Child1Settings"));

这样第一次调用Configure<Child1Settings>将使用基础数据配置它。下次调用Configure<Child1Settings>将覆盖您在 BaseSettings 中配置的内容,并向其添加额外的 Child1Settings。

关于c# - 继承 .NET Core 中的 appsettings.json 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45197162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com