<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ConfigurationManager姿勢快閃

          共 1503字,需瀏覽 4分鐘

           ·

          2022-06-11 02:06

          最近一個祖?zhèn)鞔a是使用.NET Fx寫就的,我在使用控制臺程序獲取配置時有些折騰。

          下面記錄一些管理配置文件的姿勢:

          ConfigurationManager用于在客戶機應(yīng)用程序中獲取配置信息;對于web項目,請使用WebConfigurationManager類。

          ConfigurationManager使用姿勢

          1. 添加app.config文件

          ???
          ??"ProjectName"?value="cvg.java.api.productcenter"?/>
          ??

          ??
          ????"DBConnection"?connectionString="Data?Source=(LocalDB)\v11.0;Initial?Catalog=WingtipToys;Integrated?Security=True;Pooling=False"/>
          ??


          1. 注意:編譯之后app.config配置節(jié)會進(jìn)入可執(zhí)行文件的配置文件Demo.exe.config

          2. ConfigurationManager.AppSettings["key1"]、
            ConfigurationManager.ConnectionStrings["DBConnection"] 用于從應(yīng)用的默認(rèn)配置中獲取程序配置、連接字符串配置, 這也是ConfigurationManager最常規(guī)的用法。

          3. 如何讀取外部配置?

          ? ? ?將所有配置信息放在一個配置文件顯得非?;靵y,特別是[密碼管理]的時候, 可能會劃分多個配置文件。ConfigurationManager支持項目中創(chuàng)建另外的配置文件。

          ??------?app.config文件-----

          ?"DBConnectionStrings.config"?/>


          -----?DBConnectionString.config文件,?這里已經(jīng)不需要configuration頂級配置節(jié)----?
          "1.0"?encoding="utf-8"?>

          ?"DBConnection"?connectionString="Data?Source=(LocalDB)\v11.0;Initial?Catalog=WingtipToys;Integrated?Security=True;Pooling=False"??/>

          附加的這個文件不會進(jìn)Demo.exe.config文件,可以想象到,當(dāng)需要隱藏該文件配置,可以不把該文件加入代碼管理。

          1. ConfigurationManager支持Machine,User,Exe三個級別的配置文件, 可以通過ExeConfigurationFileMap加載特定位置的配置文件。
          ????var?configFileMap?=?new?ExeConfigurationFileMap()
          ????{
          ????????ExeConfigFilename?=?@"E:\Test\WpfApp2\bin\Debug\PositionConfig.config"
          ????};
          ????var?v?=?ConfigurationManager.OpenMappedExeConfiguration(configFileMap,?ConfigurationUserLevel.None);

          我們順便看下微軟是如何編寫工具庫文件,ConfigurationManager 是一個靜態(tài)類,靜態(tài)構(gòu)造函數(shù),

          在使用靜態(tài)方法 AppSettings["key1"]索引配置時,必須先確保配置文件已經(jīng)就緒,注意下面的PrepareConfigSystem==>EnsureConfigurationSystem方法

          ??????public?static?object?GetSection(string?sectionName)
          ????????{
          ????????????if?(string.IsNullOrEmpty(sectionName))
          ????????????{
          ????????????????return?null;
          ????????????}

          ????????????PrepareConfigSystem();
          ????????????return?s_configSystem.GetSection(sectionName);
          ????????}
          ????????
          ??????????private?static?void?PrepareConfigSystem()
          ????????{
          ????????????if?(s_initState?????????????{
          ????????????????EnsureConfigurationSystem();
          ????????????}

          ????????????if?(s_initError?!=?null)
          ????????????{
          ????????????????throw?s_initError;
          ????????????}
          ????????}

          使用了一個狀態(tài)字段來表征初始化過程, 注意這里使用了一個lock防止并發(fā)下被多次初始化

          ?????private?static?void?EnsureConfigurationSystem()?{
          ????????????//?If?a?configuration?system?has?not?yet?been?set,?
          ????????????//?create?the?DefaultConfigurationSystem?for?exe's.
          ????????????lock?(s_initLock)?{
          ????????????????if?(s_initState?????????????????????s_initState?=?InitState.Started;
          ????????????????????try?{
          ????????????????????????try?{
          ????????????????????????????s_configSystem?=?new?ClientConfigurationSystem();
          ????????????????????????????s_initState?=?InitState.Usable;
          ????????????????????????}
          ????????????????????????catch?(Exception?e)?{
          ????????????????????????????s_initError?=?new?ConfigurationErrorsException(SR.GetString(SR.Config_client_config_init_error),?e);
          ????????????????????????????throw?s_initError;
          ????????????????????????}
          ????????????????????}
          ????????????????????catch?{
          ????????????????????????s_initState?=?InitState.Completed;
          ????????????????????????throw;
          ????????????????????}
          ????????????????}
          ????????????}
          ????????}


          本文算是簡短的技術(shù)快閃,記錄了ConfigurationManager 的使用姿勢和微軟工具庫的一般開發(fā)模式。


          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草综合网 | A∨在线看 | 国产精品乱轮 | 日本素人在线 | 青青啪啪啪 |