在 c# 中处理泛型配置文件
本文关键字:泛型 配置文件 处理 | 更新日期: 2023-09-27 17:55:47
我记录了自己,但找不到或理解我该如何做我想实现的目标。
事情是这样的:
- 我无法使用注册表(不确定我在客户端计算机上是否具有权限)
- 它必须是通用和透明的(代码端)
我在项目文件夹中有配置设置,假设:
- 溶液
- 项目1
- 许多代码文件夹..
- 设置
- 用户级别
- FirstEnv.settings
- 第二环境设置
- 应用级别
- FirstEnv.settings
- 第二环境设置
- 用户级别
- 项目2
- 项目1
现在我有一个 SettingFactory,它(应该)在 *.settings 中实例化(或至少将值)实例化(或至少将值)到我的应用程序设置我想要这样的东西:
public static void LoadSetting()
{
var env = ConfigurationManager.AppSettings["environnement"];
switch (env)
{
case "env1": ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/firstEnv.settings");
break;
case "env2": ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/secondEnv.settings");
break;
default : ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/secondEnv.settings");
break;
}
}
和 app.config 中的"(键,值)"
<applicationSettings>
<add name="environnement" value="env1"/>
</applicationSettings>
所以在我的代码中,当我需要使用设置时,我可以简单地参考
ConfigurationManager.appsettings["targetURI"]
当我想切换"环境"时
ConfigurationManager.appsettings["environnement"] = "env2";
SettingsFactory.LoadSettings();
关于如何做到这一点或任何设计模式改进的任何建议?
此外,我将AppLevel设置和用户级别设置分开,但它只不过是一对(键,值)。但开发人员更容易使用。这样,我可以通过代码(2行)或编辑app.config轻松修改环境
谢谢
我建议您创建自己的类来存储每个环境唯一的设置,然后使用 XmlSerialier 将它们序列化/反序列化为自己的文件。
下面是如何使用 XmlSerializer 的一个非常简单的示例。
http://tech.pro/tutorial/798/csharp-tutorial-xml-serialization
static List<YourSettingsClass> DeserializeFromXML(string path)
{
XmlSerializer deserializer = new XmlSerializer(typeof(List<YourSettingsClass>));
TextReader textReader = new StreamReader(path);
List<YourSettingsClass> settings;
settings = (List<YourSettingsClass>)deserializer.Deserialize(textReader);
textReader.Close();
return settings;
}
然后将各种环境设置文件的路径存储在 app.config 中。
<appSettings>
<add key="env1" value="C:'temp'env1-settings.xml"/>
<add key="env2" value="C:'temp'env2-settings.xml"/>
</appSettings>
用这样的东西加载它们:
List<YourSettingsClass> envSettings = DeserializeFromXML(ConfigurationManager.AppSettings["env2"]);