.Net 更容易的使用配置文件 SuperConfig

来源:https://www.cnblogs.com/emrys5/archive/2018/02/05/superconfig.html
-Advertisement-
Play Games

一、原始配置文件的問題 我們在做開發時,不管是B/S還是C/S,現在幾乎所有的項目都會碰到使用配置文件,簡單點的如鏈接字元串、上傳路徑啊,一些API的介面地址等等。複雜點就更多了,如ActiveMQ的配置信息(地址、埠、用戶名、密碼)等等。 在.Net開發中已經在(Web.config/App.c ...


一、原始配置文件的問題

我們在做開發時,不管是B/S還是C/S,現在幾乎所有的項目都會碰到使用配置文件,簡單點的如鏈接字元串、上傳路徑啊,一些API的介面地址等等。複雜點就更多了,如ActiveMQ的配置信息(地址、埠、用戶名、密碼)等等。

在.Net開發中已經在(Web.config/App.config)中提供了相對完善的配置系統,簡單的如:appSettings;複雜的如:section;相信大家一定用過,當然使用配置文件第一步先添加引用:“System.Configuration”;

  1. appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]即可獲取單個的配置項,可以說非常簡單方便。
  2. section很多人也許很陌生,但是在開發中也許都碰到過,比如在使用EntityFramework時,會在configSections中添加一項section name為entityFramework一項配置。當然肯定可以自定義section,但在使用配置文件的section相對比較複雜,而且數據類型支持的很有限,代碼過多等原因。在實際開發中LZ比較少用section,實在配置項過多逼不得已才會使用section。

如上所說,在配置文件中碰到需要配置很多項時,原始配置文件存在著諸多不便,本篇就是告訴大家怎麼在配置多項時更加容易的使用配置文件。

 

二、思路和解決辦法

a)、思路

  1. 最好沿用原始的配置方法,也就是使用section,這樣可以不用指定配置文件位置,名稱等等。當然如果需要單獨的配置文件,或者不用section模式也可以隨意的擴展。再或者知道xml格式的字元串也可以獲取配置,如配置在資料庫中等。
  2. 需要新建一個類,其中包括我們需要配置的信息,也就是一些屬性,當然最好不需要繼承父類或者實現介面。
  3. 需要配置配置文件,當然是按照新建類的格式配置,數據類型簡單的需要支持Int、String、double、Enum、Datetime等,複雜的最好支持:KeyValuePair、Array、List、Dictionary等。
  4. 最好一行代碼使用泛型可以獲取具體的配置信息,如var config=Xxxx<T>.Value;

b)、解決辦法

目前在網上LZ並沒有找到在.Net中更好的使用配置文件,所以LZ無奈自己寫了一個,可以實現我所說的“思路”,並MIT開源放置Github上,供大家交流學習,而且上傳至Nuget,方便大家使用。

 

三、Emrys.SuperConfig

Github:https://github.com/Emrys5/Emrys.SuperConfig  歡迎大家Star ^_^

Nuget:https://www.nuget.org/packages/Emrys.SuperConfig

Wiki:https://github.com/Emrys5/Emrys.SuperConfig/wiki

 

四、Emrys.SuperConfig 簡單應用

  1. 安裝包 Emrys.SuperConfig
    PM>Install-Package Emrys.SuperConfig
  2. 新建類 UserInfo

     1 class UserInfo
     2 {
     3     public string UserName { get; set; }
     4     public string Email { get; set; }
     5     public int Age { get; set; }
     6     public string BlogUrl { get; set; }
     7     public Color FavoriteColor { get; set; }
     8     public Color DislikeColor { get; set; } 
     9     public List<string> Language { get; set; }
    10    
    11 }
    12 enum Color{Red,Blue,Black} 
  3. 在web.config或者app.config中配置配置文件
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3   <configSections>
     4     <section name="userInfo" type="Emrys.SuperConfig.Section,Emrys.SuperConfig"></section>
     5   </configSections>
     6   <userInfo userName="Emrys" email="[email protected]" age="27">
     7     <blogUrl>http://www.cnblogs.com/emrys5/</blogUrl>
     8     <favoriteColor>Blue</favoriteColor>
     9     <dislikeColor>2</dislikeColor> 
    10     <language>
    11       <value>Putonghua</value>
    12       <value>Huaipu</value>
    13       <value>English</value>
    14     </language> 
    15   </userInfo> 
    16 </configuration> 
  4.  獲取配置文件信息

     var user = SuperConfig<UserInfo>.Value;

 

只需要一行代碼就可以獲取所有的配置信息,可以用簡單方便易用來形容。

 

四、Emrys.SuperConfig 其他

 

1、支持的數據類型

普通的數據類型支持 String、Int、Double、DateTime、Bool、Enum等,這些都是比較簡單的數據類型直接使用即可。

更多複雜的類型如KeyValuePair/Array/List/Dictionary等請參看Wiki:支持數據類型

 

2、自定義配置文件位置

在實際開發中,我們也許不把配置文件放置預設的Web.config/App.config,如單獨配置用戶的信息等等

更多請參看Wiki:自定義配置文件位置

 

3、自定義配置文件命名規則

在開發中,有很多人程式員的命名規則不是很統一,所有就會出現名稱大小寫的問題,其中命名包含xml的element和Attribute的名稱。

SuperConfig預設採用的首字母小寫,也就是小駝峰。

更多請參看Wiki:自定義配置文件命名規則

 

4、自定義Section格式

在原始的配置文件中,我們需要自定義配置文件,那麼就需要在配置文件中配置section,如我們常見的EntityFramework。

如果我們自定義配置文件位置,也就說不用原始的配置文件,那麼我們也就沒必要按照之前的配置方法每次在configSections新建一個Section,然後在配置。

我們完全可以自定義自己的配置文件格式,如:

<?xml version="1.0" encoding="utf-8" ?> 
<config>
  <userInfo userName="CEmrys" email="[email protected]" age="17">
    <blogUrl>http://www.cnblogs.com/emrys5/</blogUrl>
    <favoriteColor>Blue</favoriteColor>
    <dislikeColor>2</dislikeColor>
  </userInfo>
  <arrayString>
    <item>a</item>
    <item>b</item>
    <item>c</item>
    <item>d</item>
    <item>e</item>
  </arrayString>
</config>

更多請參看Wiki:自定義Section格式

 

五、總結

LZ鑒於不夠方便的在.Net中使用配置文件和在網上沒有找到合適的方法,所有自己按照自己的想法寫了一個,希望對大家也有所幫助。

最後別忘記了“推薦”和Github Star 謝謝!

Github:https://github.com/Emrys5/Emrys.SuperConfig  歡迎大家Star ^_^

Nuget:https://www.nuget.org/packages/Emrys.SuperConfig

Wiki:https://github.com/Emrys5/Emrys.SuperConfig/wiki

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於自己喜歡看小說,有的時候不方便手機看的時候希望在電腦上面看,但很多網站有廣告啊,於是封裝了套手機版的追書神器API 目前只做了搜索 詳情 書評 換源 正文 調用方式: 鏈接: https://pan.baidu.com/s/1pMNgMqZ 密碼: kpy6 ...
  • ASP.NET MVC框架提供了數據驗證的API,稱為"模型數據註解"或“模型元數據”,使我們可以使用聲明語法在模型中指定驗證的規則,常見的驗證API如下: 數據驗證API位於using System.ComponentModel.DataAnnotations;命名空間。 Movie.cs Ind ...
  • 通過製作一個登錄小案例來搭建MVC簡單三層 在View --Shared下創建一個母版頁: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <script src="~/Scrip ...
  • MVC自帶一個異常過濾器即 HandleErrorAttribute 1.首先要進行配置web.config defaultRedirect表示需要跳轉的錯誤頁面,mode需設置為 on或者 RemoteOnly. 註:HandleError只處理伺服器500錯誤,404、400等這些錯誤不進行處理 ...
  • 1、首先在項目中添加Nuget程式包... 2、然後在NuGet窗體中搜索Log4Net,然後點擊安裝<安裝過程可能會持續幾分鐘,請耐心等待> 3、在項目中添加一個Config文件,如已有App.config,則直接在其中添加內容: 截圖中配置的XML代碼如下: 最後在項目的 AssemblyInf ...
  • 用17寫AspNetCore 也一年了,最近出現了這個問題 : 在點擊發佈的時候 報錯了,構建失敗的問題,剛開始還排查日子,刪除以往的發佈遺留痕跡,後來發現不行, 但是項目在本地運行的時候是好使的,生成也不會報錯。 我們項目中有3個解決方案,只有其中一個可以進行發佈,我就對項目的(共同引用)進行查看 ...
  • 實例產品基於asp.net mvc 5.0框架,源碼下載地址:http://www.jinhusns.com/Products/Download View里所有以@開頭或@(/*代碼*)的部分代碼都會被ASP.NET引擎進行處理。在@{/*代碼體}內的代碼每一行都必須以";"結束如: 而@xxx則不 ...
  • 實例產品基於asp.net mvc 5.0框架,源碼下載地址:http://www.jinhusns.com/Products/Download 在Asp.net Mvc中當你有以下及類似以下需求時你可以使用Filter功能 判斷登錄與否或用戶許可權 決策輸出緩存 防盜鏈 防蜘蛛 本地化與國際化設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...