Есть ли способ получить систему?Конфигурация.Экземпляр конфигурации на основе произвольного xml?


Я пытаюсь модульно протестировать пользовательский раздел конфигураций, который я написал, и я хотел бы загрузить некоторый произвольный XML-файл конфигурации в Систему .Конфигурация.Конфигурация для каждого теста (вместо того, чтобы помещать xml-файл конфигурации теста В тесты.файл DLL.конфигурационный файл. То есть, я хотел бы сделать что-то вроде этого:

Configuration testConfig = new Configuration("<?xml version="1.0"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);

Однако, похоже, что ConfigurationManager предоставит вам только экземпляры конфигурации, связанные с EXE-файлом или конфигурацией машины. Является есть способ загрузить произвольный XML в экземпляр конфигурации?

3 14

3 ответа:

На самом деле есть способ, который я открыл....

Необходимо определить новый класс, наследующий от исходного раздела конфигурации следующим образом:

public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}


Затем можно создать экземпляр объекта ConfigurationSection следующим образом:

string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);

Надеюсь, это кому-то поможет: -)

Я думаю, что вы ищете ConfigurationManager.OpenMappedExeConfiguration

Он позволяет открыть файл конфигурации, который вы указываете с помощью пути к файлу (завернутый в ExeConfigurationFileMap )

Если то, что было сказано на другом плакате, правда, и вы не хотите создавать совершенно новый XML-файл для тестирования, то я бы рекомендовал вам внести изменения в конфигурацию в самом методе тестирования, а затем запустить тесты против недавно измененной конфигурации. данные.

Глядя на членов класса, я бы сказал, что ответ, вероятно, нет*. Я не уверен, почему вы хотите сделать это в любом случае, а не создавать свой собственный XML-файл конфигурации.

*это нет, исключая грязные хаки отражения