So geben Sie eine Sammlung in einer benutzerdefinierten Konfigurationsgruppe an

8

Ich hätte gerne eine XML-Konfigurationsdatei wie folgt:

%Vor%

Wie ordne ich genau das Zusammenspiel zwischen den PluginsConfigurations-, UsePluginCollection- und UsePlugin-Klassen in meinem Code an?

Ich habe dieses Tutorial online gefunden, aber es würde ein Element in Plugins einführen, das die Use-Sammlung umgibt und ich brauche das nicht.

Das ist das, was ich bisher habe, aber es ist nicht ganz richtig

    
George Mauer 04.01.2010, 22:25
quelle

2 Antworten

16

Wenn MyApp.PluginsConfiguration eine ConfigurationSection ist, können Sie eine neue Klasse definieren, die von ConfigurationElementCollection erbt und die neue Klasse zu ConfigurationProperty von MyApp.PluginsConfiguration

macht

In diesem Artikel finden Sie ausführliche Informationen zu diesen Typen. Ich habe auch gebloggt über geschachtelte Eigenschaften , aber nicht speziell für Sammlungen.

Bearbeiten: Hier mit etwas Code. Gegeben ist dieses Bit in der web.config:

%Vor%

Hier sind die Klassen um das zu ermöglichen. Beachten Sie, dass möglicherweise NullReferenceExceptions behandelt werden müssen.

%Vor%

Und um darauf zuzugreifen, sollte dieses Code-Snippet helfen:

%Vor%

Grundsätzlich haben wir eine ConfigurationSection, die das plugins-Element behandelt. In diesem geben wir eine ConfigurationElementCollection-Eigenschaft an und deklarieren sie als die Standard-Sammlung (Sie könnten theoretisch mehrere verschiedene Sammlungen unter einem Stammknoten haben).

PluginsElementCollection implementiert die ConfigurationElementCollection. ElementName muss der Name des Tags sein, in unserem Fall "use". Außerdem muss GetElementKey überschrieben werden und ein Attribut zurückgeben, das unter den Einträgen eindeutig ist.

PluginsElement implementiert dann ein Single-Use-Tag. Wir definieren nur eine Eigenschaft: AssemblyName, die dem assembly-Attribut zugeordnet ist.

Ich behaupte nicht, das alles vollständig zu verstehen (vor allem ConfigurationElementCollection und seine verschiedenen Eigenschaften BaseAdd, BaseGet usw. werden hier nicht wirklich untersucht), aber ich kann behaupten, dass das funktioniert:)

Außerdem verwendet es keine Attribute. Ich hasse Attribute - zum Glück können alle diese Attribute in den richtigen Code umgewandelt werden. Du könntest das eine oder das andere (oder beides) benutzen.

    
Michael Stum 04.01.2010, 22:29
quelle
4

Basierend auf dem Tutorial könnten Sie einfach eine XML-Konfiguration wie folgt erstellen:

%Vor%

Was ich vollkommen akzeptabel finde. Gibt es einen Grund, warum das nicht akzeptabel wäre?

Bearbeiten:

  

Ich bin nicht sicher, wie genau ich das mit dem Tutorial machen soll. Du brauchst eine Art Zwischenelement (wie das Tutorial "Aktionen" hat) - George Mauer

Ok, probiere das für die Größe aus. Ich habe vielleicht einige Tippfehler, da ich einen Code kopiere / einfüge / bearbeite, den ich benutzt habe, der das tut, was du willst, aber er sollte mit dem XML funktionieren, das ich oben definiert habe.

%Vor%     
Randolpho 04.01.2010 22:29
quelle