Gibt es eine Möglichkeit, eine System.Configuration.Configuration-Instanz basierend auf beliebigem XML abzurufen?

StackOverflow https://stackoverflow.com/questions/20952

Frage

Ich versuche, einen von mir geschriebenen benutzerdefinierten ConfigurationSection-Abschnitt einem Komponententest zu unterziehen, und möchte beliebige Konfigurations-XML in einen laden System.Konfiguration.Konfiguration für jeden Test (anstatt die Testkonfigurations-XML in die Datei Tests.dll.config einzufügen).Das heißt, ich würde gerne so etwas machen:

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

Es sieht jedoch so aus Konfigurationsmanager gibt Ihnen nur Konfigurationsinstanzen, die einer EXE-Datei oder einer Maschinenkonfiguration zugeordnet sind.Gibt es eine Möglichkeit, beliebiges XML in eine Konfigurationsinstanz zu laden?

War es hilfreich?

Lösung

Es gibt tatsächlich einen Weg, den ich entdeckt habe ...

Sie müssen wie folgt eine neue Klasse definieren, die von Ihrem ursprünglichen Konfigurationsabschnitt erbt:

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


Anschließend können Sie Ihr ConfigurationSection-Objekt wie folgt instanziieren:

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

Hoffe es hilft jemandem :-)

Andere Tipps

Ich denke, was Sie suchen, ist ConfigurationManager.OpenMappedExeConfiguration

Es ermöglicht Ihnen, eine Konfigurationsdatei zu öffnen, die Sie mit einem Dateipfad angeben (eingeschlossen in eine ExeConfigurationFileMap)

Wenn das, was der andere Poster gesagt hat, wahr ist und Sie keine völlig neue XML-Datei zum Testen erstellen möchten, würde ich Ihnen empfehlen, Ihre Konfigurationsänderungen in die Testmethode selbst einzufügen und dann Ihre Tests anhand der frisch geänderten Konfiguration auszuführen Daten.

Wenn ich mir die Teilnehmer der Klasse ansehe, würde ich sagen, dass die Antwort wahrscheinlich Nein* ist.Ich bin mir nicht sicher, warum Sie dies trotzdem tun sollten, anstatt Ihre eigene XML-Konfigurationsdatei zu erstellen.

*Das ist nein, abgesehen von chaotischen Reflexions-Hacks

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top