0

IDictionary<string, IDictionary<string, string>>app.configファイルに次のような単純なものとして定義したいapp.configセクションがあります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="ServiceInstances" type="MyProject.Configuration, MyProject"/>
    </configSections>
    <ServiceInstances>
        <ServiceInstance name="service1">
            <kvp key="key1" value="value1"/>
            <kvp key="key2" value="value2"/>
        </ServiceInstance>
        <ServiceInstance name="service2">
            <kvp key="key3" value="value3"/>
            <kvp key="key2" value="value2"/>
        </ServiceInstance>
    </ServiceInstances>
</configuration>

私が見ているすべてのチュートリアルはこれにかなり深く入り込んでいるようです、私はこれを行うための迅速で汚い方法を探しています:

IDictionary<string, string> foo = Configuration.GetDictionary("service1");
IDictionary<string, string> bar = Configuration.GetDictionary("service2");

これは文字通り数行のコードである必要があるようですが、チュートリアルでは不必要に複雑になっているようです。これに対する簡単な答えはありますか?もしそうなら、誰かがそれがどのように見えるべきかを私に見せてもらえますか?

4

2 に答える 2

2

まず、XMLファイルを解析してDictionary<string, Dictionary<string, string>>。これは次のようになります。

public Dictionary<string, Dictionary<string, string>> getDictionary()
{
    XmlDocument doc = new XmlDocument();
    doc.Load(@"path/to/file.xml");

    Dictionary<string, Dictionary<string, string>> outer = new Dictionary<string, Dictionary<string, string>>();
    Dictionary<string, string> inner;

    //cycle through outer nodes
    foreach (XmlNode service in doc.SelectNodes("/configuration/ServiceInstances/ServiceInstance"))
    {
        inner = new Dictionary<string, string>();
        //cycle through inner nodes
        foreach (XmlNode kvp in service.SelectNodes("kvp"))
        {
            inner.Add(kvp.Attributes["key"].Value, kvp.Attributes["value"].Value);
        }
        outer.Add(service.Attributes["name"].Value, inner);
    }

    return outer;
}

そして、次のように辞書を呼び出すことができます。

var foo = getDictionary();
Dictionary<string,string> bar = foo["service1"];
于 2012-08-06T13:44:56.003 に答える
1

構成セクションデザイナを使用して、ダーティジョブを実行できます。

http://csd.codeplex.com/

Visual Studioデザイナーのサポートがあり、サンプル構成を生成しますが、これまでのところ1つの問題があります。VS2012の場合はVS2010をインストールする必要がありますが、すぐに修正されると思います。

于 2012-08-06T13:59:27.213 に答える