Есть ли способ получить экземпляр System.Configuration.Configuration на основе произвольного xml?
Я пытаюсь выполнить unit test настраиваемое ConfigurationSection, которое я написал, и я хотел бы загрузить произвольный конфигурационный XML в System.Configuration.Configuration для каждого теста (вместо того, чтобы помещать тестовую конфигурацию xml в файл Tests.dll.config. То есть я хотел бы сделать что-то вроде этого:
Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);
Однако, похоже, что ConfigurationManager предоставит вам только экземпляры конфигурации, связанные с EXE файлом или конфигурацией машины. Есть ли способ загрузить произвольный XML в экземпляр конфигурации?
Ответы
Ответ 1
Фактически есть способ, который я обнаружил....
Вам необходимо определить новый класс, наследующий исходный раздел конфигурации, следующим образом:
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);
Надеюсь, что это поможет кому-то: -)
Ответ 2
Я думаю, что вы ищете ConfigurationManager. OpenMappedExeConfiguration
Он позволяет вам открыть файл конфигурации, указанный вами с помощью пути к файлу (завернутый внутри ExeConfigurationFileMap)
Если то, что сказал другой плакат, верно, и вы не хотите создавать целый новый XML файл для тестирования, я бы рекомендовал вам поместить ваши изменения в Configuration в самом методе тестирования, а затем выполнить ваши тесты против недавно измененные данные конфигурации.
Ответ 3
Глядя на членов класса, я бы сказал, что ответ, вероятно, не *. Я не уверен, почему вы все равно хотите сделать это, а не создавать свой собственный файл конфигурации XML.
* Это нет, исключая грязные рефлексивные хаки