在配置我们的应用程序的时候,经常会遇到有的配置元素、配置节需要可变的属性。比如,在 .net 2.0 中经常遇到的 Provider 模式。在配置 Provider 的时候,可能会需要为不同的 Provider 提供不同的属性,比如为 SqlDataProvider 提供连接字符串属性,为 XmlFileDataProvider 提供文件路径等。

下面代码是一般的 ConfigurationElement 需要的代码:

 1在 .NET 2.0 配置中使用可变属性的配置元素public class ProviderSettings : ConfigurationElement
 2}

为了使 .net 2.0 配置系统允许我们使用自定义的属性(也就是除了已经定义的 name 和 type 属性),我们还需要做一些其他的工作。再看看 ConfigurationElement 的方法和属性,发现有 virtual 的 OnDeserializeUnrecognizedAttributeOnDeserializeUnrecognizedElement 方法:

  • OnDeserializeUnrecognizedAttribute: Called when an unknown attribute is encountered while deserializing the ConfigurationElement object
  • OnDeserializeUnrecognizedElement: Called when an unknown sub element is encountered while deserializing the ConfigurationElement object
说的再明白不过了,就是允许我们自己处理配置系统不认识的属性(就是除开已经定义的 name 和 type 属性)和子元素(我们这里讨论属性,子元素就先放在一边吧)。既然可以这样,我们就在 OnDeserializeUnrecognizedAttribute 方法里面将不认识的属性放到一个地方不就可以了吗。那再把上面的代码改一改。
 1在 .NET 2.0 配置中使用可变属性的配置元素public ProviderSettings : ConfigurationElement
 2}

其对应的单元测试代码就不写了,大家自己写吧:)

完成了上面的步骤,其实还是不够的。如果单元测试代码写的好的话,马上就能发现问题了:) 使用上面的方法,在读取配置的时候是没有问题的,可以顺利得从 Parameters 中获取配置的数据。然而在保存的时候就出现问题了。在使用配置的时候,我们在应用程序无论怎么操作 Parameters,保存的时候都不能将改动保存到配置文件中;而且如果 ProviderSettings 中的已定义属性被更改过的话,在保存的时候那些 unrecognized attributes 也消失了。也就是我们只能从配置文件中读取属性而不能修改这些属性!这显然不满足我们的需求!不过从刚才的现象中似乎表示被保存的配置应该都是 Configuration.Properties 中的内容。看来我们还要想办法把那些 unrecognized attributes 放到 Properties 中才行啊。

下面就是改进以后的代码:

 1在 .NET 2.0 配置中使用可变属性的配置元素public ProviderSettings : ConfigurationElement
 2}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-07-28
猜你喜欢
  • 2022-12-23
  • 2021-09-22
  • 2021-08-11
  • 2021-07-22
  • 2021-06-06
  • 2021-10-18
  • 2021-09-22
相关资源
相似解决方案