动态应用程序配置解决方案






4.43/5 (5投票s)
另一种在 .NET 应用程序中使用复杂的可更新配置的简单方法

引言
我们在 .NET 2.0 中有几种选择来处理应用程序
优点 | 缺点 | |
标准配置文件中的appSettings 部分 |
|
|
自定义配置节 |
|
|
applicationSettings 节 & 设置文件 |
|
|
挑战
那么我想要什么呢?
- 我想从配置存储中存储和检索任意类。
- 如果配置在两次后续尝试配置之间发生更改,则后续访问应反映更改。
- 我太懒了,无法为每个类构建实现,我必须存储。
解决方案
此解决方案基于使用任何方便的架构中的 XML 配置文件。配置由表示存储在配置文件中的数据的类和负责存储、检索和缓存配置数据的管理器组成。管理器使用简单的 XML 序列化/反序列化来读取/写入数据。配置文件路径存储在标准应用程序配置文件中。 System.Web.Caching.Cache
用于缓存配置数据。
那么实现呢?为了解决我的懒惰问题,我构建了一个简单的实用程序,可以从 XML 配置文件生成整个实现。您只需要提供配置文件路径、输出目录和所需的命名空间。
Using the Code
在您可以下载的源代码存档中有三个项目的解决方案。所有实际的代码生成工作都在 DynamicConfiguration
类库中完成。 ConfigGenerator
是一个 WinForm 实用程序,可让您选择配置文件并从中生成代码。最后一个是一个示例项目,演示了配置用法。
// Get configuration
Sample cnfg = SampleConfigurationManager.Data;
// Access configuration data
MessageBox.Show(String.Format("Configured screen width: {0}", cnfg.Screen.Width));
// Alter configuration
cnfg.Screen.Width = 640;
cnfg.Screen.Height = 480;
// Save configuration
SampleConfigurationManager.Save();
关注点
要从 XML 文件构建类,我们需要首先创建 XML 架构。通常,您可以使用 xsd.exe 实用程序、Visual Studio 2005 中的 XML 编辑器或使用其他工具(例如 XML Spy)来执行此操作。 xsd.exe 生成的架构对我来说不够好,因为它与数据集结构兼容,并且在某些情况下会生成未类型化的结果。例如,尝试使用此简单 XML 从 xsd.exe 生成 XSD 和类
<Test>
<AAA>
<Value>5</Value>
</AAA>
<BBB>
<Description>Sample</Description>
</BBB>
</Test>
要创建架构,我放弃了 XSD 实现(它只是将 XML 加载到 dataset
中并使用 GetXmlSchema
方法检索架构),而是使用了 XmlSchemaInference
类。此类是 System.Xml.Schema
命名空间的一部分;它在 .NET 2.0、3.0 中受支持,如果您使用 XML 架构,则不应忽略它。
另一个值得关注的点是使用 System.Web.Caching.Cache
对象。显然,很多人不知道它可以在 Web 上下文之外使用。以下代码确保它可以从 Web 应用程序和常规 Windows 应用程序中使用
private static Cache cache
{
get
{
if (HttpContext.Current == null)
return HttpRuntime.Cache;
return HttpContext.Current.Cache;
}
}
历史
- 2007 年 8 月 7 日:首次发布