Webでconfigとapp.configファイルにカスタム構成ノードを追加
経験のある開発者はみな開発していることを知っている.NETアプリケーションでは、ログファイルの保存パス、データベース接続情報など、一般的に使用される変更可能な情報をプロファイルで保存できます.これにより、本番環境のパラメータ情報が開発環境と一致しなくても、ソースコードを変更せずにプロファイルを変更して再コンパイルするだけで便利です.また,ノードにアプリケーションの構成情報を保存し,にデータベース接続文字列情報を保存することも一般的に約束されている(詳細は本ブログ『ASP.NET夜話の11』参照).上記の方法と約束は大部分の開発において便利を得るのに十分であるが、場合によってはグループ別に配置情報を格納することができる場合があり、上記の方法を採用すれば直感的ではないだけでなく、読み取りもあまり便利ではないので、幸いである.NETではこのような方法が提供されています.Log 4 NetまたはEnyimを使用した場合Cachingの友達は、次の配置に慣れていないに違いありません.
または、
上記の構成ファイルが表示されると、configファイルのデフォルトノードではありませんが、上記の構成でプログラムが実行されてもエラーは発生しません.enyim.comまたはlog 4 netというノードが表示されます.これにより,関連構成情報もうまく分類して保存できる.ここで、周公は簡単な例を示します.この例は周公が2006年から開発した自用ソフトウェア(美化されていないので無料で公開されていない)に由来しています.このアプリケーションのconnfigファイルには、独自の構成を追加して、自分のノード、appを追加しました.configファイルの内容は以下の通りです.
コンフィギュレーションファイルではを使用して、アプリケーションにコンフィギュレーションファイルのSoftwareSettingsノードについて、対応するクラスがImageAssistantプログラムセットImageAssistantであることを伝える.Configuration.SoftwareSettingsクラスがあり、ノードにはノードとノードも見られます.はノードの集合であり、複数のサブノードも含まれています.これらの関係を明確にするには、SoftwareSettings、LoadSettings Collection、LoadSettings Element、およびPathSettings Elementの4つのクラスを追加する必要があります.パブリッシュの便宜上、周公はこの4つのクラスのコードを物理ファイルに配置し、コードは以下の通りです(System.configuration.dllへの参照を追加することに注意してください).
上記のコードでは、configファイルに対応する属性の属性名、IsRequiredは必須属性かどうか、DefaultValueは属性のデフォルト値を示すコンフィギュレーションプロパティという属性が表示されます.最初に、次の関係に注意します.SoftwareSettings:ルートノード、コンフィギュレーション設定から継承されます.LoadSettings Collection:子ノードの集合.コンフィギュレーションElementCollectionから継承されます.LoadSettingsElement:子ノード、コンフィギュレーションElementから継承されます.PathSettingElement:子ノード、コンフィギュレーションElementから継承されます.次のコードを作成した後、上記のクラスをどのように使用すればいいのでしょうか.実は簡単です.以下のようにします.
このプログラムの実行結果は、LoadBmp=True LoadJpg=True LoadGif=True LoadPng=False SavePath=C:ResizeImages,SearchSubPath=True
まとめ:上記のconfigファイルではで同様の効果が得られましたが、カスタムノードでは関連するアプリケーション構成を簡単に読み取ることができ、メンテナンスも容易です.開発中に本明細書で同様の状況に遭遇した場合は、本明細書で説明する方法を採用してもよい.添付ファイルは、本明細書で使用するソースコードです.
周公2011-03-08
- <sectionGroup name="enyim.com"><section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" /></sectionGroup>
または、
- <configSections><section name="log4net" type="System.Configuration.IgnoreSectionHandler"/></configSections>
上記の構成ファイルが表示されると、configファイルのデフォルトノードではありませんが、上記の構成でプログラムが実行されてもエラーは発生しません.enyim.comまたはlog 4 netというノードが表示されます.これにより,関連構成情報もうまく分類して保存できる.ここで、周公は簡単な例を示します.この例は周公が2006年から開発した自用ソフトウェア(美化されていないので無料で公開されていない)に由来しています.このアプリケーションのconnfigファイルには、独自の構成を追加して、自分のノード、appを追加しました.configファイルの内容は以下の通りです.
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- <section name="SoftwareSettings" type="ImageAssistant.Configuration.SoftwareSettings, ImageAssistant" />
- </configSections>
- <SoftwareSettings>
- <LoadSettings>
- <add key="LoadBmp" value="true"/>
- <add key="LoadJpg" value="true"/>
- <add key="LoadGif" value="true"/>
- <add key="LoadPng" value="false"/>
- </LoadSettings>
- <PathSettings SavePath="C:\ResizeImages\" SearchSubPath="true"/>
- </SoftwareSettings>
- <appSettings>
- <add key="LoadBmp" value="true"/>
- <add key="LoadJpg" value="true"/>
- <add key="LoadGif" value="true"/>
- <add key="LoadPng" value="false"/>
- <add key="IncludeSubPath" value="true"/>
- </appSettings>
-
- </configuration>
コンフィギュレーションファイルでは
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Configuration;
-
- // :zhoufoxcn( )
- // :2011-03-08
- //blog:http://blog.csdn.net/zhoufoxcn http://zhoufoxcn.blog.51cto.com
- // : , , 。
- namespace ImageAssistant.Configuration
- {
- public sealed class LoadSettingsCollection : ConfigurationElementCollection
- {
- private IDictionary<string, bool> settings;
-
- protected override ConfigurationElement CreateNewElement()
- {
- return new LoadSettingsElement();
- }
-
- protected override object GetElementKey(ConfigurationElement element)
- {
- LoadSettingsElement ep = (LoadSettingsElement)element;
-
- return ep.Key;
- }
-
- protected override string ElementName
- {
- get
- {
- return base.ElementName;
- }
- }
-
- public IDictionary<string, bool> Settings
- {
- get
- {
- if (settings == null)
- {
- settings = new Dictionary<string, bool>();
- foreach (LoadSettingsElement e in this)
- {
- settings.Add(e.Key, e.Value);
- }
- }
- return settings;
- }
- }
-
- public bool this[string key]
- {
- get
- {
- bool isLoad = true;
- if (settings.TryGetValue(key, out isLoad))
- {
- return isLoad;
- }
- else
- {
- throw new ArgumentException(" '" + key + "' 。");
- }
- }
- }
-
- }
-
- public class LoadSettingsElement : ConfigurationElement
- {
- [ConfigurationProperty("key", IsRequired = true)]
- public string Key
- {
- get { return (string)base["key"]; }
- set { base["key"] = value; }
- }
- [ConfigurationProperty("value", IsRequired = true)]
- public bool Value
- {
- get { return (bool)base["value"]; }
- set { base["value"] = value; }
- }
- }
-
- public class PathSettingElement : ConfigurationElement
- {
- /// <summary>
- ///
- /// </summary>
- [ConfigurationProperty("SavePath", IsRequired = true)]
- public string SavePath
- {
- get { return (string)base["SavePath"]; }
- set { base["SavePath"] = value; }
- }
- /// <summary>
- ///
- /// </summary>
- [ConfigurationProperty("SearchSubPath", IsRequired = false, DefaultValue = true)]
- public bool SearchSubPath
- {
- get { return (bool)base["SearchSubPath"]; }
- set { base["SearchSubPath"] = value; }
- }
- }
-
- /// <summary>
- /// config
- /// </summary>
- public sealed class SoftwareSettings : ConfigurationSection
- {
- /// <summary>
- /// SoftwareSettings LoadSettings
- /// </summary>
- [ConfigurationProperty("LoadSettings", IsRequired = true)]
- public LoadSettingsCollection LoadSettings
- {
- get { return (LoadSettingsCollection)base["LoadSettings"]; }
- }
-
- /// <summary>
- /// SoftwareSettings PathSettings ,
- /// </summary>
- [ConfigurationProperty("PathSettings", IsRequired = false)]
- public PathSettingElement PathSetting
- {
- get { return (PathSettingElement)base["PathSettings"]; }
- set { base["PathSettings"] = value; }
- }
-
- }
- }
上記のコードでは、configファイルに対応する属性の属性名、IsRequiredは必須属性かどうか、DefaultValueは属性のデフォルト値を示すコンフィギュレーションプロパティという属性が表示されます.最初に、次の関係に注意します.SoftwareSettings:ルートノード、コンフィギュレーション設定から継承されます.LoadSettings Collection:子ノードの集合.コンフィギュレーションElementCollectionから継承されます.LoadSettingsElement:子ノード、コンフィギュレーションElementから継承されます.PathSettingElement:子ノード、コンフィギュレーションElementから継承されます.次のコードを作成した後、上記のクラスをどのように使用すればいいのでしょうか.実は簡単です.以下のようにします.
- class Program
- {
- static void Main(string[] args)
- {
- SoftwareSettings softSettings = ConfigurationManager.GetSection("SoftwareSettings") as SoftwareSettings;
-
- foreach (string key in softSettings.LoadSettings.Settings.Keys)
- {
- Console.WriteLine("{0}={1}", key, softSettings.LoadSettings[key]);
- }
- Console.WriteLine("SavePath={0},SearchSubPath={1}", softSettings.PathSetting.SavePath, softSettings.PathSetting.SearchSubPath);
- Console.ReadLine();
- }
- }
このプログラムの実行結果は、LoadBmp=True LoadJpg=True LoadGif=True LoadPng=False SavePath=C:ResizeImages,SearchSubPath=True
まとめ:上記のconfigファイルでは
周公2011-03-08