使用ConfigurationManager读取生成的配置XML字符串

时间:2016-11-25 23:53:08

标签: c# xml

我正在以编程方式生成配置文件。

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?

1 个答案:

答案 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 ...
}