Csharp/C#教程:我可以在自定义ConfigurationSection上指定具有IntegerValidator属性的范围吗?分享


我可以在自定义ConfigurationSection上指定具有IntegerValidator属性的范围吗?

我有一个包含以下ConfigurationSection的类:

namespace DummyConsole { class TestingComponentSettings: ConfigurationSection { [ConfigurationProperty("waitForTimeSeconds", IsRequired=true)] [IntegerValidator(MinValue = 1, MaxValue = 100, ExcludeRange = false)] public int WaitForTimeSeconds { get { return (int)this["waitForTimeSeconds"]; } set { this["waitForTimeSeconds"] = value; } } [ConfigurationProperty("loginPage", IsRequired = true, IsKey=false)] public string LoginPage { get { return (string)this["loginPage"]; } set { this["loginPage"] = value; } } } } 

然后我在.config文件中有以下内容:

  

当我然后尝试使用此配置部分时,我收到以下错误:

 var Testing = ConfigurationManager.GetSection("TestingComponentSettings") as TestingComponentSettings; 

ConfigurationErrorsException未处理

属性“waitForTimeSeconds”的值无效。 错误是:该值必须在1-100范围内。

如果我将IntegerValidator更改为ExcludeRage = true,我(显然)得到:

ConfigurationErrorsException未处理

属性“waitForTimeSeconds”的值无效。 错误是:该值不得在1-100范围内

如果我然后将.config中的属性值更改为高于100的数字,则它可以正常工作。

如果我将validation器更改为只有MaxValue为100它可以工作,但也会接受值-1。

是否可以使用IntegerValidatorAttribute的范围?

编辑添加

被微软确认为问题 。

正如Skrud所指出的,MS已经更新了连接问题:

报告的问题是由于配置系统如何处理validation器的怪癖。 每个数字配置属性都有一个默认值 – 即使未指定一个。 如果未指定默认值,则使用值0。 在此示例中,配置属性最终使用的默认值不在整数validation程序指定的有效范围内。 因此,配置解析始终失败。

要解决此问题,请更改配置属性定义以包含1到100范围内的默认值:

 [ConfigurationProperty("waitForTimeSeconds", IsRequired=true, DefaultValue="10")] 

这确实意味着该属性将具有默认值,但我实际上并不认为这是一个主要问题 – 我们说它应该具有一个“合理”范围内的值,并且应该准备设置一个合理的默认。

上述就是C#学习教程:我可以在自定义ConfigurationSection上指定具有IntegerValidator属性的范围吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/962116.html

(0)
上一篇 2021年11月26日
下一篇 2021年11月26日

精彩推荐