`
csstome
  • 浏览: 1549512 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

继承ConfigurationValidatorBase和ConfigurationProperty的默认值

 
阅读更多

通过继承ConfigurationValidatorBase类,用户可以自定义一个配置系统的验证器,可是今天使用这种方法发现了一个问题:每个ConfigurationProperty在验证其实际值前,都要对其默认值先进行一次验证,注意这里只是验证一次,发生在验证第一个ConfigurationProperty的值之前。表现形式就好像静态构造函数似的。

比如下面的ConfigurationSection和ConfigurationValidatorBase代码:(代码模拟验证年龄必须大于等于15岁,否则抛出异常)


接着app.config定义一个合法的和一个非法的(Age小于15的AgeSection)ConfigurationSection


测试逻辑代码:

这段代码,最初想当然是先输出29,因为mysec1会通过验证,接着接到ConfigurationErrorsException,因为mysec2不会通过验证的。可结果却是连29都没有输出,直接显示没有通过验证的错误信息,检查ConfigurationErrorsException的Line属性竟然是0。

经过调试发现执行验证器(本例中的Age15Validator类)的Validate函数次数是3,而不是最初所期望的2。这三次传入的参数值分别是0,29,4。而这个0就是文章开头提到的一类ConfigurationProperty的默认值,再次强调一下这个默认参数的验证只调用一次,并且是限于任何实际ConfigurationProperty的真实值。

那么,针对上述问题,解决方案是设置ConfigurationProperty的默认值并确保这个默认值能够顺利通过验证器的验证,比如上述程序我们就可以把AgeSection的Age属性的默认值改成15.


这样的话,程序就可以按要求运行了。

第一行输出29(mysec1属性通过验证)

第二行输出错误信息并指出行数。(mysec2没有通过验证)



分享到:
评论

相关推荐

    Invalid Configuration Property(处理方案).md

    Invalid Configuration Property(处理方案).md

    Configuration Property Missing(处理方案).md

    Configuration Property Missing(处理方案).md

    maven 依赖,聚合,继承,插件运行应用

    这些模块通过Maven的依赖、聚合和继承关系组织在一起,形成一个完整的项目结构。每个模块都有自己的POM.xml文件,定义了其依赖、构建配置和可能的子模块。 总结起来,Maven的依赖管理、聚合、继承和插件运行机制是...

    书写自己的配置文件中的section

    [ConfigurationProperty("property1", IsRequired = true)] public string Property1 { get { return (string)this["property1"]; } set { this["property1"] = value; } } [ConfigurationProperty(...

    java读取和保存property文件(可含中文)

    此外,还可以使用第三方库如Apache Commons Configuration或Java 8引入的`java.util.prefs.Preferences` API来提供更高级的配置管理功能,如支持XML配置、默认值、监听属性变化等。 总结,Java中的`java.util....

    超高频开发包xy-new.part06.rar

    超高频开发包xy-new.part06.rar

    MyBatis异常-Property 'configLocation' not specified, using default MyBatis Configuration

    在使用MyBatis框架时,可能会遇到一个特定的异常:“Property 'configLocation' not specified, using default MyBatis Configuration”。这个异常通常表明MyBatis在启动时无法找到配置文件的位置,因此它会使用默认...

    .netFramework2.0专门提供了配置文件的操作。[文].pdf

    在这个例子中,`ConfigSectionData` 类有两个属性:`Id` 和 `Time`,它们都被 `ConfigurationProperty` 特性标记,这意味着它们会被序列化到配置文件中。 在实际操作配置文件时,我们可以使用 `Configuration...

    实例--自定义Web.config文件中的ConfigSection配置节

    在.NET中,配置节是通过继承`System.Configuration.ConfigurationSection`类来实现的。创建一个新的DLL类库项目,例如命名为`CustomConfigSectionLibrary`,然后在该库中定义一个自定义配置节类。例如: ```csharp ...

    自定义配置文件节点

    这可以通过继承`System.Configuration.ConfigurationSection`类来实现。例如,我们可以创建一个名为`CustomSettingsSection`的类: ```csharp public class CustomSettingsSection : ConfigurationSection { ...

    C# 自定义配置节点简例

    [ConfigurationProperty("name", IsRequired = true)] public string Name => (string)this["name"]; [ConfigurationProperty("value", IsRequired = true)] public string Value => (string)this["value"]; } ...

    c#自定义XML配置文件解析 .Net Framework

    [ConfigurationProperty("sqlConnectionString", IsRequired = true)] public string SqlConnectionString { get { return (string)this["sqlConnectionString"]; } set { this["sqlConnectionString"] = value...

    .Net自定义配置文件的操作

    这个类需要继承`ConfigurationSection`类,并使用`ConfigurationProperty`属性定义属性。例如: ```csharp public class CustomConfigSection : ConfigurationSection { [ConfigurationProperty(...

    解决在Web.config或App.config中添加自定义配置的方法详解

    然后,通过定义公共属性来映射配置文件中的配置项,并使用ConfigurationProperty特性来关联配置项和公共属性。 创建配置类通常需要完成三步工作: - 继承System.Configuration.ConfigurationSection类。 - 使用...

    官方commons-configuration-1.10的jar包

    7. **默认值和合并策略**:Library 允许定义默认值,并提供了策略来处理不同配置源之间的冲突。这有助于确保即使在某些配置缺失的情况下,程序也能正常运行。 8. **XML配置的解析**:对于XML配置文件,Commons ...

    Android应用源码之Configuration_Configuration.zip

    1. **Configuration类的结构**:查看Configuration类的继承层次,了解其接口和实现,以及其中的成员变量和它们的用途。 2. **构造函数**:分析不同构造函数如何初始化Configuration对象,了解它们如何根据设备当前...

    commons-configuration

    Apache Commons Configuration 是一个Java库,专门用于处理配置文件和提供灵活的访问配置数据的API。这个库被设计成模块化和可扩展的,允许开发者在各种各样的应用场景中轻松地处理配置参数。"commons-configuration...

    在.net中读写config文件的各种方法

    通过在自定义配置类中使用`ConfigurationProperty`特性,可以指定配置属性,如`MySection333`所示: ```xml <Command1>... <Command2>... ``` 在对应的配置类中,可以定义属性并用`ConfigurationProperty`...

    Config配置文件的操作.txt

    通过使用`ConfigurationProperty`属性,我们可以指定哪些属性可以从配置文件中读取。例如,`id`和`time`两个属性分别映射到配置文件中的`id`和`time`元素。 #### 二、操作配置文件 接下来,我们将展示如何使用`...

    configuration

    Configuration。dll 文件,Manage.dll文件

Global site tag (gtag.js) - Google Analytics