Enterprise Library: Configuration Application Block类设计分析篇
Written by: Rickie Lee (rickieleemail#yahoo.com)
My blog: www.cnblogs.com/rickie
Configuration Application Block允许应用程序方便读写应用程序配置信息。
下图显示了Configuration Application Block中类和对象之间的关系,该图假定你使用Application Block内置的XML文件Storage Provider和Transformer,XML文件Storage Provider存放配置数据到XML文件中(其他Providers使用其他Storage格式,如Windows注册表)。XmlFileStorageProvider对象指向包含特定配置节配置信息的文件。ConfigurationBuilder对象指向包含特定配置节配置元数据的文件。一般情况下,包含配置元数据的文件为Windows应用程序的App.Config或Web应用程序的Web.Config文件。
Configuration Application Block隔离配置元数据和实际配置文件,Application Block将元数据放置在它自己的配置文件中,与实际的配置信息进行隔离。配置设置被组合在一起,并作为一个配置节。应用程序中每一个Enterprise Library的Application Block均使用它自己的配置节,并有对应的配置文件。Configuration Application Block通过使用配置元数据来访问配置数据。
配置元数据包含有配置存储位置、Transformer类型和Configuration Application Block用来读写配置数据的Storage Provider等等信息。配置元数据文件分成一些配置节,每一节包含读写配置设置中特定组的必要信息。ConfigurationManager类提供了静态方法在定义的存储位置读写指定配置节的配置设置。首先,ConfigurationManager对象从应用程序配置元数据文件读取配置元数据信息,然后通过元数据信息读写配置节信息。
每一个配置节的设置都缓存在hashtable中。当client端请求配置数据时,ConfigurationBuilder将查询缓存中的数据。如果在缓存中发现这些配置数据,ConfigurationBuilder对象则不访问存储区的配置数据。如果Storage Provider检测存储区内的数据发生变化,ConfigurationBuilder将清除缓存。ConfigurationManager对象允许应用程序清除整个或特定配置节的缓存,如果缓存被清除后,随后的请求将访问存储区中的配置数据。
IStorageProviderReader接口定义了用来从存储位置读取配置信息,IStorageProviderWriter接口实现了IStorageProviderReader接口,并且定义了用来写配置信息的接口。Configuration Application Block中的XmlFileStorageProvider实现了上述接口,用来读写XML配置文件。
ITransformer接口用来在应用程序与Storage Provider之间转换配置设置对象,Configuration Application Block中的XmlSerializerTransformer类实现了该接口。XmlSerializerTransformer类转换应用程序中定义的对象和XmlNode对象。应用程序不是必须要求配置Transformer,如果没有Transformer,返回给应用程序的配置设置对象与Storage Provider提供的对象类型一样。
***
作者:Rickie Lee (rickieleemail#yahoo.com)
本文参考Enterprise Library, Configuration Application Block文档。
References:
1. Enterprise Library, Configuration Application Block
2. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html
3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html