Hei*_*nzi 13 .net c# vb.net configuration app-config
访问当前应用程序的appSettings时,我得到一个NameValueCollection:
NameValueCollection settings =
ConfigurationManager.AppSettings;
Run Code Online (Sandbox Code Playgroud)
当访问另一个应用程序的appSettings时,我得到一个KeyValueConfigurationCollection:
KeyValueConfigurationCollection settings =
ConfigurationManager.OpenExeConfiguration(sExe).AppSettings.Settings;
Run Code Online (Sandbox Code Playgroud)
这两个方法(ConfigurationManager.AppSettings和AppSettingsSection.Settings)具有相似但不同(和不兼容)的返回类型是否有原因?也许我在两种情况之一中使用过时的方法?
是否有一种简单的方法可以在两种情况下获得相同的类型,即为另一个应用程序的appSettings获取NameValueCollection或为当前运行的应用程序的appSettings获取KeyValueConfigurationCollection?
更新:对于问题2,我发现以下方法将当前运行的(非Web)应用程序配置为KeyValueConfigurationCollection:
KeyValueConfigurationCollection settings =
Configuration.ConfigurationManager.OpenExeConfiguration(Configuration.ConfigurationUserLevel.None).AppSettings.Settings;
Run Code Online (Sandbox Code Playgroud)
两者都试图解决相同的问题,并且它们与相同的配置模式兼容,但区别在于,正如您所说,两者都是在不同的开发时代演变的。
但这与您使用过时的版本无关。这些是获得相同结果的不同方法。也许您不明白为什么,但关键是有时您需要从不同的来源获取配置,因此拥有这些选项是有意义的。
回答你的第二个问题,你可以为两种返回类型实现一个扩展方法,将它们转换为通用类型。
例如,如果您想要 NameValueCollection,您可以实现:
public static NameValueCollection ToCollection(this KeyValueConfigurationCollection source)
{
// An iterator to create a NameValueCollection here and return it.
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要 KeyValueConfigurationCollection,您可以执行相同的操作,但要返回此类型的实例。
然后,当您需要 AppSettings 时,您可以执行
检查作者的答案编辑!我的这部分答案是错误且无用的:)谢谢。ConfigurationManager.AppSettings.ToCollection();和/或 ConfigurationManager.OpenExeConfiguration(sExe).AppSettings.Settings.ToCollection();。
事实上,名称-值集合在某种程度上已经过时了,因为它是从 .net 1.x 时代开始的。但它并没有过时,因为这是(目前)这样做的方式。
| 归档时间: |
|
| 查看次数: |
6891 次 |
| 最近记录: |