Custom ConfigurationSectionHandler

0

Witam

Mam pewien problem, a mianowicie w swojej aplikacji potrzebuję odczytać z pliku konfiguracyjnego pewne dane (configSections). Fragment xml'a wygląda tak:
<configSections>
<section name="conS" type="MyClass.ConfigurationSectionHandler, MyClass" />
</configSections>
<conS>
<con Name="a1" Value="a11" />
<con Name="a2" Value="a22" Opt="a222" />
<con Name="a3" Value="a33" Opt="a333" />
</conS>

Jak widać nic skomplikowanego, ale gorzej z odczytaniem tego. Dopatrzyłem się informacji, że trzeba stworzyć klasę, która będzie potrafiła odczytać te informacje. Klasa niech się nazywa MyClass.ConfigurationSectionHandler. Kombinowałem na różne sposoby i nic mi z tego nie wychodzi. Wydaje mi się, że przy tak prostej konstrukcji nie powinno to być skomplikowane, a jednak mi nie wychodzi :( Proszę o pomoc.

0

Jeżeli to zapisałeś w pliku web.config lub app.config, to nie potrzebujesz żadnej własnej klasy na odczyt.
Wystarczy ConfigurationSettings.AppSettings (oczywiście wpisy muszą być w wymaganej sekcji, czego ja nie jestem pewien jeśli chodzi o powyższy kod - sprawdź w MSDN)

0

Konstrukcja bloku AppSettings jest inna i wygląda tak:
<appSettings>
<add key="a" value="b" />
</appSettings>

Jak widać można tutaj definiować dane jedynie w postaci <klucz, wartość> więc dla moich potrzeb to za mało. W moim przypadku odpowiednia sekcja to configSections.

W każdym razie udało mi się rozwiązać problem w taki sposób, że klasa ConfigurationSectionHandler dziedziczy po interfejsie:
ConfigurationSectionHandler : IConfigurationSectionHandler

W tym przypadku trzeba zaimplementować metodę w celu zachowania zgodności z interfejsem:
object Create(object o1, object o2, XmlNode xmlN)
{

}

Najważniejszym argumentem tej metody jest xmlN, który odpowiada gałęzi <conS> z przykładu z pierwszego wpisu. Mając uchwyt do tej gałęzi możemy sparsować xml'a w tradycyjny sposób. To rozwiązanie jest, jak dla mnie, o wiele prostsze i łatwiejsze do zrealizowania. Szkoda tylko że tyle się namęczyłem zanim znalazłem o tym informacje w MSDN :(

Tak czy inaczej dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1