2009-08-22 26 views
71

app.configファイルにカスタム設定セクションを追加します。 これを行う方法はありますか、私のプログラムでこれらの設定にアクセスするにはどうしたらいいですか?続き は、私は私のapp.configに追加するconfigセクションです:app.configでカスタム設定セクションを作成するには?

<RegisterCompanies> 
    <Companies> 
     <Company name="Tata Motors" code="Tata"/> 
     <Company name="Honda Motors" code="Honda"/> 
    </Companies> 
</RegisterCompanies> 

答えて

120

のConfigurationElement会社の作成:

public class Company : ConfigurationElement 
{ 

     [ConfigurationProperty("name", IsRequired = true)] 
     public string Name 
     { 
      get 
      { 
       return this["name"] as string; 
      } 
     } 
      [ConfigurationProperty("code", IsRequired = true)] 
     public string Code 
     { 
      get 
      { 
       return this["code"] as string; 
      } 
     } 
} 

をConfigurationElementCollection:

public class Companies 
     : ConfigurationElementCollection 
    { 
     public Company this[int index] 
     { 
      get 
      { 
       return base.BaseGet(index) as Company ; 
      } 
      set 
      { 
       if (base.BaseGet(index) != null) 
       { 
        base.BaseRemoveAt(index); 
       } 
       this.BaseAdd(index, value); 
      } 
     } 

     public new Company this[string responseString] 
     { 
      get { return (Company) BaseGet(responseString); } 
      set 
      { 
       if(BaseGet(responseString) != null) 
       { 
        BaseRemoveAt(BaseIndexOf(BaseGet(responseString))); 
       } 
       BaseAdd(value); 
      } 
     } 

     protected override System.Configuration.ConfigurationElement CreateNewElement() 
     { 
      return new Company(); 
     } 

     protected override object GetElementKey(System.Configuration.ConfigurationElement element) 
     { 
      return ((Company)element).Name; 
     } 
    } 

とのConfigurationSection:

public class RegisterCompaniesConfig 
     : ConfigurationSection 
    { 

     public static RegisterCompaniesConfig GetConfig() 
     { 
      return (RegisterCompaniesConfig)System.Configuration.ConfigurationManager.GetSection("RegisterCompanies") ?? new RegisterCompaniesConfig(); 
     } 

     [System.Configuration.ConfigurationProperty("Companies")] 
      [ConfigurationCollection(typeof(Companies), AddItemName = "Company")] 
     public Companies Companies 
     { 
      get 
      { 
       object o = this["Companies"]; 
       return o as Companies ; 
      } 
     } 

    } 

を、あなたはまた、web.configファイルに新しい構成セクション(アプリを登録する必要があります。 config):

<configuration>  
    <configSections> 
      <section name="Companies" type="blablabla.RegisterCompaniesConfig" ..> 

は、あなたがMVCアプリを使用している場合は、リストされている部分が細かいことは注目に値する。その

var config = RegisterCompaniesConfig.GetConfig(); 
foreach(var item in config.Companies) 
{ 
    do something .. 
} 
+14

であなたの設定をロードします。コンソールアプリケーション、Webサービス、その他の場合は、 'blablabla.RegisterCompaniesConfig'の後に '、AssemblyName'を付ける必要があります – KevinDeus

+0

セクションタグのtype属性にアセンブリを指定する必要があります – ilmatte

+0

例外が発生しています'System.Configuration.IConfigurationSectionHandler'から継承しています..私は間違って何をしていますか? – Oysio

9

あなたは.NET 2.0 CodeProjectの上のコンフィギュレーション・アップにジョンRistaの3回シリーズをチェックアウトする必要があります。

強くお勧めします、よく書かれており、非常に便利!

これは、必要なカスタム設定セクションを設計するために、必要なクラス(ConfigurationElementおよび/またはConfigurationSectionから派生しています)を書く方法を非常にはっきりと示しています。