扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:陶刚编译 来源:天极 2007年9月10日
关键字: Visual Studio 窗体 配置文件
.NET的最新版本把强数据类型扩展到了配置文件中,添加了设置的范围、基于GUI的属性编辑器和拖放配置类的只读约束。
在.NET 2.0的一些新特性中,包含了对System.Configuration名称空间的修补和Visual Studio 2005配置编辑器。与以前的实现方式相比,新的类把桌面和Web应用程序的配置方法提升到了一个完善的新的层次。本文聚焦于简单的桌面应用程序,该应用程序的唯一目的是显示和修改自己的配置文件的内容。如果要运行这个应用程序,你必须下载Visual Studio 2005公众beta版。
一些新特性
最重要的两个配置文件特性是用于类型安全性的强数据输入和用户设置信息范围的分离和编辑。
•类型安全性(Type Safety)
以前的.NET框架组件只允许字符串设置信息。当我们把设置信息直接读入非字符串变量的时候,就会遇到一些问题,如下所示:
int maxConnections =
ApplicationSettings.AppSettings.Key["MaxConnections"];
如果配置信息的内容不是字符串,而表现为其它的数据类型,例如布尔型、整型或更复杂的数据类型,你就必须编写定制的代码,转换字符串值或建立并填充适当的对象。与此形成对照的是,新的API为实现定制的串行化程序处理了所有基本数据类型和接口。此外框架组件还为一些经常用到的编程结构(例如数据源连接和URL)提供了内建的处理程序。
•范围(Scopes)
新API使用了一个叫做范围(scopes)的概念来区分应用程序与用户设置。你需要使用Application(应用程序)范围来设置应用程序的一些细节信息(例如连接字符串)和其它驱动应用程序的一些值,这些值一般不会(不倾向于)改变。User(用户)范围是用于存放用户可配置的应用程序值的(例如最后的窗口位置和最常使用的文档)。更重要的是,User范围为每项设置存储了默认值。当用户使用应用程序改变这些默认值的时候,配置文件把这些更新后的值存储在单独的位置中。这是很重要的,因为它保证了应用程序配置文件的完整性,并且把用户特定的数据保存在用户的系统配置中。不用进行任何额外的开发,配置框架组件就能在后台自动地把用户特定的设置信息读取出来。
•ThisConfigEditor应用程序
本文中提供的示例应用程序ThisConfigEditor(图1所示),是一个用于显示自己的配置文件中的设置信息的简单工具。尽管非常简单,但是它可以作为满足大多数应用程序需求的很好的跳板。
图1:示例配置编辑器:显示示例项目配置文件的设置信息
图2:Visual Studio为项目生成的文件,添加了ThisConfigEditor.cs文件
图3:属性编辑器:双击"Settings.settings"条目载入属性编辑器
图4:选择数据源:从类型列表中选择连接字符串设置类型的时候,Visual Studio将载入一系列的对话框来定义字符串属性
图5:连接属性对话框:在选择连接字符串类型之后出现这个标准的连接属性对话框
private void PopulateListView() { ListViewItem item = null; this.buttonUpdateSetting.Enabled = false; this.textBoxSettingValue.Enabled = false; this.listViewSettings.Items.Clear(); Properties.Settings settings = Properties.Settings.Default; foreach (SettingsProperty property in settings.Properties) { bool match = false; switch (_dt) { case DisplayType.All: match = true; break; case DisplayType.Application: foreach (System.Collections.DictionaryEntry attribute in property.Attributes) { if (attribute.Value is System.Configuration.ApplicationScopedSettingAttribute) { match = true; break; } } break; case DisplayType.User: foreach (System.Collections.DictionaryEntry attribute in property.Attributes) { if (attribute.Value is System.Configuration.UserScopedSettingAttribute) { match = true; break; } } break; } if (match) { item = new ListViewItem(property.Name); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, property.PropertyType.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, settings[item.Text] as string)); item.Tag = property; this.listViewSettings.Items.Add(item); } } } |
图6:改变User范围的设置信息
图7:新的用户配置文件:.NET框架组件保存的示例应用程序的新的用户配置文件的位置
采用这种方法分离数据,通过使用户特定的数据与用户保持关联,保护了应用程序配置文件的完整性。而且,.NET框架组件自动地载入用户特定的内容而不需要开发者来干涉。请注意,最后的一个目录与应用程序的版本号相对应。这确保了当某个属性的数据类型发生改变的时候,应用程序的延续版本将维护它们独立的完整性而不会相互干扰。
精简框架组件又落后了
Pocket PC上的精简框架组件的实现有时候看起来不受.NET世界的重视。它的1.0版本的实现没有为System.Configuration名称空间和注册表做任何准备。2.0的beta版文档在System.Configuration名称空间中出现了每个类实体的精简框架组件,就像beta文档中的所有名称空间中的大量类的实现方法一样,但是现在是不支持的。人们只能希望这只是新的.NET平台的一个短暂的阶段,并且最后的发布版支持与桌面版相同的能力。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者