作为配置属性的不可变类型

2024-02-17

是否可以使用不可变类型作为 .NET 配置 API 的配置属性?

假设我有一个名为 MyClass 的不可变类型:

public class ImmutableClass
{
    private readonly int value;

    public ImmutableClass(int value)
    {
        this.value = value;
    }

    public int Value
    {
        get { return this.value; }
    }
}

我想使用这种类型作为 ConfigurationSection 中的配置属性:

public class MyConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("foo")]
    public ImmutableClass Foo
    {
        get { return (ImmutableClass)base["foo"]; }
        set { base["foo"] = value; }
    }
}

当我这样做时,我无法序列化和反序列化 MyConfigurationSection,因为它会引发以下异常:

System.Configuration.ConfigurationErrorsException:属性“criterion”的值无法转换为字符串。错误是:无法找到支持“FindCriterion”类型的属性“criterion”与字符串之间进行转换的转换器。

如果我从 ConfigurationElement 派生 ImmutableClass,当我尝试序列化和反序列化配置部分时,我会收到此异常:

System.Reflection.TargetInitationException:调用目标已引发异常。 ---> System.Reflection.TargetInitationException:调用目标已引发异常。 ---> System.MissingMethodException:没有为此对象定义无参数构造函数。

我可以完全控制 ImmutableClass,因此我可以实现所需的任何接口。

有什么方法可以连接到配置 API,以便可以以这种方式使用 ImmutableClass?


我个人认为你最好将配置中的数据分开section(这似乎需要是可变的),以及如何在对象模型中表示它。没有什么可以阻止您拥有两种表示形式 - 用于配置的简单 (DTO/POCO) 版本和用于在应用程序中实际使用的自定义版本(在本例中是不可变的)。

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

作为配置属性的不可变类型 的相关文章

随机推荐

  • PHP 有类似 ruby​​ gem 的打包器吗?

    我是 PHP 程序员 了解 Rails Ruby 宝石捆绑器 http gembundler com 非常好的安装依赖项的工具 php有类似的东西吗 也许某些php框架有这样的工具 关于gem捆绑器的说明 Bundler 在应用程序的整个生
  • MalformedInputException 与 Files.readAllLines()

    我正在迭代一些文件 准确地说是 5328 个文件 这些文件是平均 XML 文件 最多 60 200 行 它们首先通过简单的方法进行过滤isXml源文件解析路径 Files walk Paths get home me development
  • 如何使用 codeigniter 查询获取每个产品的平均评分?

    我有评级表 其中对用户给出的每个产品进行评级 我正在检索所有评级记录 但同时我想根据每个产品获得平均评级 但我无法获得输出 Query this gt db gt select ratings this gt db gt select se
  • Python:名称解析;函数 def 的顺序

    我有一个非常简单的例子 usr bin env python a 1 NameError name a is not defined b 1 NameError name b is not defined c 1 NameError nam
  • Segue 未获取选定的行号

    我正在将数据从表视图控制器传递到详细视图 我尝试使用indexPath row直接在我的prepareForSegue方法 但是它显示错误 使用未解析的标识符 indexPath 因此 在搜索网络后 我设置了变量indexOfSelecte
  • 如何在 Android 版 Eclipse 中启用 LogCat/Console?

    在 Android 中编写一个简单的程序时 我错误地关闭了 LogCat 窗口 我想知道如何再次显示它 在 Eclipse 中 转到 窗口 gt 显示视图 gt 其他 gt Android gt Logcat Logcat 只是模拟器或设备
  • Excel VBA 在表格下方添加数据时扩展表格

    我在 Excel 中有一个表格 当用户在表格后添加数据时 该数据不属于该表格 我创建了一个可以执行来扩展表的代码 代码如下 Sub ExtendTableToLastRow Sheets Update Select If ActiveShe
  • 如何使用 Woocommerce WC_AJAX 类

    我正在开发一个基于 Wordpress WooCommerce 的商店 我使用ajax来调用数据 但我是通过 wp admin admin ajax php 在 function php 文件中使用我自己的函数来完成此操作 昨天我在 woo
  • ruby:“p *1..10”中的星号是什么意思

    the line p 1 10 做完全相同的事情 1 10 each x puts x 这将为您提供以下输出 ruby e p 1 10 1 2 3 4 5 6 7 8 9 10 例如 在使用 textmate 时 这是一个很好的快捷方式
  • 如何在ListView中正确使用TextSwitcher?

    My TextSwitcher对于每条记录ListView应显示第一个值 text1 然后是另一个值 text2 然后再次首先值 依此类推 仅当以下情况时才会发生text2不是空的 否则text1应始终显示 没有任何更改和动画 我已经创建了
  • log4j2.xml中每个包的Log4J不同日志级别

    我有一个 Java Web 应用程序log4j2 xml我需要为每个包设置不同的级别 例如 com myexample firstmodule 这应该是INFO level com myexample secondmodule 这应该是TR
  • 如何在 Python 中停止打印 OpenCV 错误消息

    Same as 这个问题在这里 https stackoverflow com questions 17567808 how to suppress opencv error message 17575610 17575610 除了 Pyt
  • 使用 DOM 解析 HTML 时保留文件偏移量?

    我要修改 img src 格式不太畸形的 HTML 中的属性 WordPress 帖子 我知道我可以采取简单的方法并使用正则表达式 但我担心穿着蓝色毛茸茸的衣服的人会在我睡梦中困扰我 https meta stackexchange com
  • 如何将字符串数据框列转换为日期时间作为年和周的格式?

    样本数据 Week Price 2011 31 1 58 2011 32 1 9 2011 33 1 9 2011 34 1 9 我有一个像上面这样的数据框 我想将 周 列类型从字符串转换为日期时间 My Code data Date Ti
  • 动态郎。运行时与反射

    我计划在我的新项目中使用动态关键字 但在介入之前 我想了解使用动态关键字而不是反射的优点和缺点 在专业人士的帮助下 我可以找到关于动态关键字的信息 可读 可维护的代码 更少的代码行 虽然与使用动态关键字相关的负面影响 我听到的是 影响应用程
  • 将 django 查询集转换为数组

    我想将 django 查询集转换为数组 例如 firstnames Users objects values firstnames 得到看起来像的结果 firstnames Nancy Andrew Janet Margaret Steve
  • 以下哪个 SQL 查询会更快?两个表或连续查询的联接?

    我这里有两张桌子 ITEMS ID DETAILS OWNER USERS ID NAME Where ITEMS OWNER USERS ID 我列出了这些物品及其各自所有者的姓名 为此 我可以在两个表上使用联接 或者我可以选择所有 IT
  • Conda 报告 PackagesNotFoundError: python=3.1 for reticulate 环境

    我正在尝试在 R 中使用 python 包 但我不断收到相同的错误 ImportError cannot import name read csv from pandas unknown location 我也不能使用 py install
  • 尝试改进 haskell 中当前处理列表的丑陋代码

    我正在尝试在 Haskell 中实现一个函数 该函数将采用任意整数列表xs和一个整数k 并返回一组列表k在所有可能的位置 例如 对于一个xs 0 1 and k 2 我们会有 myFunction 0 1 2 2 0 1 0 2 1 0 1
  • 作为配置属性的不可变类型

    是否可以使用不可变类型作为 NET 配置 API 的配置属性 假设我有一个名为 MyClass 的不可变类型 public class ImmutableClass private readonly int value public Imm