程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#讀取Appconfig中自定義的節點,

C#讀取Appconfig中自定義的節點,

編輯:C#入門知識

C#讀取Appconfig中自定義的節點,


  今天在使用Nlog的時候,發現了一個之前沒注意的問題。

 

  以前,我的app配置文件都是這麼寫的,當然配置比較多的時候會改用xml。

 

 如果<appSettings>節點中的內容很多的話,我自己有時候都分不清哪個是做什麼的,可能朋友們會說,你加個注釋不就行了。但是可不可以把一些相同的配置放在一起呢,就像上面的nlog一樣。先試著改造下配置文件

1     <configSections>
2         <section name="mySection" type="ConfigSolution.ConfigSectionHandler,ConfigSolution"></section>
3     </configSections>
4     <mySection>
5         <port CPort="40001" WPort="40002" SPort="50000"></port>
6         <coustomAssembly CommandsAssembly="HX.Components.Command.Collection" CommandMessagesAssembly="HX.Components.CommandMessage.Collection"></coustomAssembly>
7     </mySection>

  那麼,怎麼獲取section裡的值呢?從configSections 元素開始到網上風暴了一番。ConfigurationSection 類

 然後知道可以通過ConfigurationManager類的GetSection方法獲取到配置文件的信息。(如果應用程序需要以只讀方式訪問其自身配置,則對於 Web 應用程序,建議使用 GetSection() 重載方法;對於客戶端應用程序,建議使用 ConfigurationManager.GetSection 方法。----MSDN)

var mySection = ConfigurationManager.GetSection("mySection");

  運行一下程序試試,迎來了第一個異常。System.Configuration.ConfigurationErrorsException: 創建 mySection 的配置節處理程序時出錯: 類型“ConfigSolution.ConfigSectionHandler”不從“System.Configuration.IConfigurationSectionHandler”繼承。 ---> System.TypeLoadException: 類型“ConfigSolution.ConfigSectionHandler”不從“System.Configuration.IConfigurationSectionHandler”繼承。

  既然說我的ConfigSolution.ConfigSectionHandler不從System.Configuration.IConfigurationSectionHandler繼承,那好,我就繼承它,然後看看這個接口都有些什麼東西,Ctrl+T一下(SharpDevelop的快捷鍵),這接口就一個方法 

直接MSDN一下,IConfigurationSectionHandler.Create  信息量不是很大,就一句話:IConfigurationSectionHandler.Create 方法,創建配置節處理程序。算了,直接斷點跟蹤一下,果然有東西

 

好了,剩下的就是對xml的讀取了。直接把section return看看,

 

這回程序正常運行了,且mySection 也拿到了配置文件

 

但是在程序中我們怎麼獲取這些配置數據呢?我創建了一個處理配置文件的MySectionHelper類,大體如下

 1     public class MySectionHelper
 2     {
 3         readonly XmlNode _section;
 4         readonly XmlNode _coustomAssembly;
 5         public MySectionHelper(XmlNode section)
 6         {
 7             _section=section;
 8             _coustomAssembly= _section.SelectSingleNode("coustomAssembly");
 9         }
10         
11         public string CommandsAssembly{get{return _coustomAssembly.Attributes["CommandsAssembly"].Value;}}
12     }

試試行不行,我的配置文件

1     <configSections>
2         <section name="mySection" type="ConfigSolution.ConfigSectionHandler,ConfigSolution"></section>
3     </configSections>
4     <mySection>
5         <port CPort="40001" WPort="40002" SPort="50000"></port>
6         <coustomAssembly CommandsAssembly="HX.Components.Command.Collection" CommandMessagesAssembly="HX.Components.CommandMessage.Collection"></coustomAssembly>
7     </mySection>

運行結果:

好了,一切完成。然後到網上去找找看看有沒有更多的資料,果然很多

子陽哥寫了一篇《.Net 自定義應用程序配置》大家可以去看看。

MSDN:https://msdn.microsoft.com/zh-cn/sqlserver/ms228056(v=vs.71).aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved