.NET Core 中 appsettings.json 设置的继承

2024-05-21

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

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

    [...]

  • ChildNSettings - 拥有所有 BaseSettings + ChildNSettings

那么我的控制器中就会有这个:

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

应用程序设置.json

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

启动.cs

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

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

应用程序设置.json

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

实现此目的的一种方法是使用基本部分数据配置您的子项,然后使用子项特定数据对其进行配置,如下所示:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Core 中 appsettings.json 设置的继承 的相关文章

  • 了解多重继承中的 vptr 吗?

    我试图理解 Effective C 一书中的陈述 下面是多重继承的继承图 现在书上说vptr需要每个类中单独的内存 它还做出以下声明 上图中的一个奇怪之处是 尽管涉及四个类 但只有三个 vptr 如果实现可以随意生成四个 vptr 但三个就
  • Unity 检查 Toggle 是否打开

    我正在检查开关是否打开 通常我使用public Toggle myToggle在检查器中 但这我将脚本附加到Toggle并且可能错误地使用GetComponent
  • 在控制台应用程序中使用 SendGrid

    是否可以在 C 的控制台应用程序中使用发送网格 我的代码不起作用 我真的不知道为什么 你可以帮帮我吗 using System using System Net using System Net Mail using SendGrid na
  • 使用 C# 组合两个列表

    在 OCaml 中 有一个函数接受两个相同大小的列表并返回一个元组列表 val combine a list gt b list gt a b list C 中有类似的东西吗 我对输出的类型没有强烈的要求 它可以是元组列表 也可以是字典之类
  • gcc 没有小字符串优化吗?

    Most std string实现 包括 GCC 使用小字符串优化 例如 有一个answer https stackoverflow com a 21710033 2640636讨论这个 今天 我决定检查我编译的代码中的字符串在什么时候被移
  • C 十六进制常数类型

    我写了以下c代码 include
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 使用 AJAX 加载部分视图不起作用

    请原谅我 我是 MVC 和 AJAX 的新手 目前我只是提交一个表单 我想使用表单中的数据使用 ajax 更新部分视图中的表 My UserInfo部分视图如下所示 model IEnumerable
  • 从 std::function 调用签名推导模板参数

    考虑这个模板函数 template
  • 如何检查类型是否显式/隐式可构造?

    如何检查某种类型是否可以从其他类型显式 或反之亦然隐式 构造 这种情况下有SFINAE的伎俩吗 我可以写is explicitly constructible as a 的组合std is constructible and std is
  • 如何在 Web 表单中进行 Html.Encode

    我有一个 ASP NET Web 窗体应用程序 有一个带有文本框的页面 用户在其中输入搜索词用于查询数据库 我知道我需要防止 JavaScript 注入攻击 我该怎么做呢 在 MVC 中我会使用Html Encode Web 表单中似乎无法
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q
  • 同一服务器上的多个.NET版本

    所以我一直都知道在一台计算机 客户端或服务器 上运行多个版本的 NET 框架是可以的 这个问题 https stackoverflow com questions 407306 running many versions of net on
  • 在 C++ 中为哈希映射提供复合键

    我有一个数据结构
  • 如何将 MemoryStream 写入 byte[] [重复]

    这个问题在这里已经有答案了 可能的重复 从流创建字节数组 https stackoverflow com questions 221925 creating a byte array from a stream 我正在尝试在内存中创建文本文
  • 为什么未初始化的指针会导致内存访问冲突接近 0?

    据说often 但并非总是如此 当你在接近于零的内存位置 比如 89 美元 获得 AV 时 你就有了一个未初始化的指针 但我也在 Delphi 书籍中看到了这一点 嗯 或者它们都是由同一作者写的 Update 引自 Bob Swart 等人
  • C# - 方法必须有返回类型

    我在调用 C 中的方法时遇到问题 不断收到消息 方法 计算 必须有返回类型 using System Diagnostics namespace WindowsFormsApplication1 public partial class F
  • 表单身份验证 web.config 设置

    根 web config 文件中的此规范是否正确 我没有在受保护的文件夹中使用子 web config
  • 删除DataGridView(表)中的多行

    我有一个数据表 myTable 它与 DataGridView dgv 绑定 DataGridView dgv 有一个复选框列 我的目标是删除在按钮事件中选中的行 数据表当然会更新 现在我的代码仅适用于删除一行 不适用于多行 感谢帮助 pr
  • “你好世界!!”在 .NET 4 中生成 3500 个页面错误

    我正在运行 Windows Vista 和 Visual Studio 2010 使用 NET 4 2 GB RAM 和大约 800 MB 可用空间 我创建了一个 Windows 窗体应用程序 但没有向其中添加任何代码 只需在发布模式下编译

随机推荐