我正在以编程方式生成配置文件。
Program.cs的
string config = new ConfigBuilder().GenerateConfigFile(false);
ConfigBuilder.cs
public string GenerateConfigFile(bool isSettingEnabled)
{
return "<configuration>...</configuration>";
}
结果
<configuration>
<appSettings>
<add key="IsSettingEnabled" value="false" />
</appSettings>
</configuration>
使用类似ConfigurationManager的东西,我希望在不首先将文件写入磁盘的情况下从config变量中读取设置。换句话说,做一些事情:
ConfigurationManager.OpenFromMemory(config);
var isSettingEnabled = ConfigurationManager.AppSettings["IsSettingEnabled"];
然而,似乎ConfigurationManager只能处理文件。
是否有一种简单的方法来解释配置而无需自己解析XML?
答案 0 :(得分:1)
我不相信你能做到这一点,所以我所做的就是创建一个IDisposable
包装类,它将配置数据存储在磁盘上的临时文件中,并在包装类被处理掉了。
看起来像这样:
sealed class ConfigurationGenerator : IDisposable
{
private string _tempFileName;
public ConfigurationGenerator(string configurationData)
{
if (String.IsNullOrEmpty(configurationData)) throw new ArgumentNullException("configurationData");
_tempFileName = Path.GetTempFileName();
File.WriteAllText(_tempFileName, configurationData);
}
public System.Configuration.Configuration Generate()
{
var filemap = new ExeConfigurationFileMap
{
ExeConfigFilename = _tempFileName
};
var config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
return config;
}
public void Dispose()
{
if (_tempFileName != null)
{
string s = _tempFileName;
_tempFileName = null;
File.Delete(s);
}
}
}
你可以这样使用它:
using(var configGenerator = new ConfigurationGenerator(configData))
{
Configuration configuration = configGenerator.Generate();
... use the configuration data here ...
}