6

web.configに次のようなカスタマイズされた構成セクションがあります。

     <configSection>
            <section name="CustomConfig" type="ConfigSectionRoot" allowLocation="true" allowDefinition="Everywhere"/>
        </configSection>


    <CustomConfig>
    <ConfigRoot>
        <add key="DataBase" value="CouchDB"/>
        <add key="FrontEnd" value="Asp.Net"/>
        <add key="AppName" value="Virtual WorkPlace"/>
      </ConfigRoot>
    </CustomConfig>

<AppSettings>
<add key="DataBase" value="CouchDB"/>
</AppSettings>

私のConfigSectionRoot.csは次のようなものです。

public class ConfigSectionRoot:ConfigurationSection
    {

        [ConfigurationProperty("key", DefaultValue = "", IsKey = true, IsRequired = true)]
        public string Key
        {
            get
            {
                return ((string)(base["key"]));
            }
            set
            {
                base["key"] = value;
            }
        }

        [ConfigurationProperty("value", DefaultValue = "", IsKey = false, IsRequired = false)]
        public string Value
        {
            get
            {
                return ((string)(base["value"]));
            }
            set
            {
                base["value"] = value;
            }
        }
    }

カスタム構成の代わりにAppSettingsを使用すると、次のようにアクセスできます。

string results= ConfigurationManager.AppSettings["Database"];
// results wil contain "CouchDB"

カスタマイズされた構成セクションで同じことを達成する方法はありますか?plsは私を助けます

4

2 に答える 2

11

NameValueSectionHandler

構成がKey-Valueストア以上である必要がない場合は、NameValueSectionHandlerを使用します。

<section name="customConfig" type="System.Configuration.NameValueSectionHandler"/>
<!-- ... -->
<customConfig>
  <add key="DataBase" value="CouchDB" />
  <add key="FrontEnd" value="Asp.Net" />
  <add key="AppName" value="Virtual WorkPlace" />
</customConfig>

その後、appSettingsと同じように、それを読み取ることができます。

var customConfig = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("customConfig");//i have changed like this and it worked fine
var database = customConfig["DataBase"];

SingleTagSectionHandler

SingleTagSectionでも同じことができます。

<section name="customConfig" type="System.Configuration.SingleTagSectionHandler"/>
<!-- ... -->
<customConfig database="CouchDB" frontEnd="Asp.Net" appName="Virtual Workplace" />

そして、次のようにクエリします。

var customConfig = (System.Collections.Hashtable) System.Configuration.ConfigurationManager.GetConfig("customConfig");
var database = customConfig["database"];
于 2012-10-15T22:10:44.787 に答える
0

.NET構成フレームワークは、要素のリストを表すためのConfigurationElementCollectionクラスを提供します。上記の例では、ConfigurationElementCollectionの実装はConfigRootxml要素で表されています。コレクションには、「ConfigSectionRoot」タイプの子要素が含まれている必要があります。ConfigSectionRootクラスは、Configuration Sectionではなく、ConfigurationElementから継承する必要があります。

CustomConfigxml要素を表す別のクラスを作成する必要があります。このクラスは構成のルートであり、ConfigurationSectionから継承する必要があります。

public class CustomConfigConfigurationSection : ConfigurationSection
{
    public static CustomConfigConfigurationSection Section
    {
        get
        {
            return ConfigurationManager.GetSection("customConfig") as CustomConfigConfigurationSection;
        }
    }

    public ConfigConfigurationElementCollection ConfigRoot
    {
        get
        {
            return this["configRoot"] as ConfigConfigurationElementCollection;
        }
    }
}

public class ConfigConfigurationElement : ConfigurationElement
{
    [ConfigurationProperty("key")]
    public string Key
    {
        get
        {
            return (string)this["key"];
        }
    }

    [ConfigurationProperty("value")]
    public string Value
    {
        get
        {
            return (string)this["value"];
        }
    }
}

public class ConfigConfigurationElementCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new ConfigConfigurationElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((ConfigConfigurationElement)element).Key;
    }

    // Slight hack to look up the direct value property of the ConfigConfigurationElement from the collection indexer
    public new string this[string key]
    {
        get
        {
            return (base[key] as ConfigConfigurationElement).Value;//I m getting the error in this line
        }
    }
}

直接使用:

var section = CustomConfigConfigurationSection.Section;
var value = section.ConfigRoot["key"];
于 2012-10-15T20:41:09.963 に答える