在配置我们的应用程序的时候,经常会遇到有的配置元素、配置节需要可变的属性。比如,在 .net 2.0 中经常遇到的 Provider 模式。在配置 Provider 的时候,可能会需要为不同的 Provider 提供不同的属性,比如为 SqlDataProvider 提供连接字符串属性,为 XmlFileDataProvider 提供文件路径等。
下面代码是一般的 ConfigurationElement 需要的代码:
2
为了使 .net 2.0 配置系统允许我们使用自定义的属性(也就是除了已经定义的 name 和 type 属性),我们还需要做一些其他的工作。再看看 ConfigurationElement 的方法和属性,发现有 virtual 的 OnDeserializeUnrecognizedAttribute 和 OnDeserializeUnrecognizedElement 方法:
- 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
2
其对应的单元测试代码就不写了,大家自己写吧:)
完成了上面的步骤,其实还是不够的。如果单元测试代码写的好的话,马上就能发现问题了:) 使用上面的方法,在读取配置的时候是没有问题的,可以顺利得从 Parameters 中获取配置的数据。然而在保存的时候就出现问题了。在使用配置的时候,我们在应用程序无论怎么操作 Parameters,保存的时候都不能将改动保存到配置文件中;而且如果 ProviderSettings 中的已定义属性被更改过的话,在保存的时候那些 unrecognized attributes 也消失了。也就是我们只能从配置文件中读取属性而不能修改这些属性!这显然不满足我们的需求!不过从刚才的现象中似乎表示被保存的配置应该都是 Configuration.Properties 中的内容。看来我们还要想办法把那些 unrecognized attributes 放到 Properties 中才行啊。
下面就是改进以后的代码:
2