輕量級的.NET對象查找服務和AOP開發框架Netop.Core源碼解說(2)--配置

来源:http://www.cnblogs.com/fhxie/archive/2017/05/21/6884204.html
-Advertisement-
Play Games

先把Netop.Core的最核心部分“對象查找服務”放一放,先說說應用系統的配置。 一個應用系統的配置是少不了的,除非你是一個純硬代碼族頑固者。 也見過有的應用系統通過系統提供的健值(key-value)方法在appSettings節點下設了幾十個甚至上百個,不堪入目,更別說條理性了。 開發一個應用 ...


先把Netop.Core的最核心部分“對象查找服務”放一放,先說說應用系統的配置。

一個應用系統的配置是少不了的,除非你是一個純硬代碼族頑固者。

也見過有的應用系統通過系統提供的健值(key-value)方法在appSettings節點下設了幾十個甚至上百個,不堪入目,更別說條理性了。

開發一個應用框架,配置一般是少不了,如log4net就有自己的配置,不會讓你在appSettings設幾十個條目。

開發配置是很簡單的,下麵慢慢說來。

在NET應用中,配置信息以XML文檔儲存。WEB應用為Web.config文件,可執行文件為*.exe.config(編譯時由app.config複製並改名)。

在NET中,配置文件的信息經實現System.Configuration.IConfigurationSectionHandler介面的處理器類讀出,其介面只有一個方法:

object Create(Object parent, object configContext, XmlNode section);

在Netop.Core中,實現的配置處理器類是Netop.Core.Configuration.ConfigurationHandler.

實現了配置處理器類,就獲得了此節點的XML信息,再對它進行解析讀出其相關內容即可。在Netop.Core中,ConfigurationHandler把這個工作交給了Netop.Core.Configuration.AppConfigurationManager。

看看實際的配置信息就清楚了:

  <configSections>
     <section name="Netop.Application" type="Netop.Core.Configuration.ConfigurationHandler,Netop.Core" />    
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>

這裡可以看出,log4net的配置處理器類是log4net.Config.Log4NetConfigurationSectionHandler
Netop.Core的配置處理器類是Netop.Core.Configuration.ConfigurationHandler,節點名為Netop.Application,再看Netop.Application段:

 <Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
    <Application.ObjectLocator>
      <DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>
      <ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>
      <AspectAgentName>AppAspect</AspectAgentName>
    </Application.ObjectLocator>

    <Application.Log>
      <LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>
      <LogParameter>Log</LogParameter>
    </Application.Log>

    <Application.Agent>
      <Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Service.xml</File>
      </Agent>
      <Agent name = "AppAspect"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Aspect.xml</File>
      </Agent>
      <Agent name = "AppEntity"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Entity.xml</File>
      </Agent>
    </Application.Agent>
 </Netop.Application>

<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">中type的值即是AppConfigurationManager。

在Netop.Core中,有一個類Netop.Core.Configuration.SettingConfiguration實現讀取類似“<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>”這樣的信息。
對於SettingConfiguration,Netop.Core有個預設的節點:
<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
       ……
    <Application.Settings>
    ……
    </Application.Settings>
</Netop.Application>

如在Application.Settings加項目如:<Host>smtp.sohu.com</Host>
使用則為:Netop.Core.Configuration.AppConfiguration.Current.ApplicationSettingsConfig.GetKeyValue("Host")而得到值smtp.sohu.com .

也可以自己加一Section如:
   <Application.SmtpServer>
      <Host>smtp.sohu.com</Host>
      <RequriedAuthenticate>true</RequriedAuthenticate>
      ……
   </Application.SmtpServer>
使用則為:Netop.Core.Configuration.AppConfiguration.Current.GetAppSettingConfiguration("Application.SmtpServer").GetKeyValue("Host")而得到值smtp.sohu.com .

在Netop.Core中,還有一種代理配置,代理配置類只要實現Netop.Core.Configuration.IConfigurationAgent介面就可挺拔式使用。IConfigurationAgent如下:
    public interface IConfigurationAgent
    {
        void Initialize(XmlNode xml);
        AgentConfigurationInfo GetConfigurationInfo();
    }

Netop.Core已經實現一個XML文件代理配置類:Netop.Core.Configuration.FileAgentConfiguration 。
 
對於配置信息:
 <Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
    <Application.ObjectLocator>
      <DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>
      <ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>
      <AspectAgentName>AppAspect</AspectAgentName>
    </Application.ObjectLocator>

    <Application.Log>
      <LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>
      <LogParameter>Log</LogParameter>
    </Application.Log>

    <Application.Agent>
      <Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Service.xml</File>
      </Agent>
      <Agent name = "AppAspect"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Aspect.xml</File>
      </Agent>
      <Agent name = "AppEntity"  type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Entity.xml</File>
      </Agent>
    </Application.Agent>
 </Netop.Application>


<Application.Agent>節點內的就是代理配置信息:
<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
        <File>Service.xml</File>
</Agent>
name為代理配置名,type為代理配置類,File為文件路徑。
程式使用為:
object p = null;
AppConfiguration.Current.GetAgentData("AppObjectService", out p);//返回Service.xml文件的XML信息
當然代理配置名AppObjectService是跟<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>聯繫的,感興趣的可以看ObjectServiceConfigurationManager的內容。

對於開發者要自己在Netop.Application加節點(不屬於上面所說的類型),怎麼辦呢?
AppConfigurationManager有一方法:XmlNode GetData(string key) ,調用後自己解析XML信息即可(調用AppConfiguration.Current.GetData("節點名")返回XmlNode)。

這是Netop.Core的配置服務。

當然還可以直接使用NET系統的配置處理器類來處理配置信息,如:
    System.Configuration.NameValueSectionHandler <!--以NameValue鍵值/對的形式返回配置節中的信息-->
    System.Configuration.DictionarySectionHandler  <!--以Dictionary字典鍵值對的形式返回配置節中的信息-->
    System.Configuration.SingleTagSectionHandler <!--基礎結構。處理 .config 文件中由單個 XML 標記所表示的各配置節。-->

 

    輕量級的.NET對象查找服務和AOP開發框架源碼Netop.Core3.5下載地址:http://download.csdn.NET/detail/tom_cat_xie_jxdy/9837303

    輕量級的.NET對象查找服務和AOP開發框架測試源碼 下載地址:http://download.csdn.Net/detail/tom_cat_xie_jxdy/9837278

   Netop.Core--輕量級的.NET對象查找服務和AOP開發框架文檔下載地址:http://download.csdn.net/detail/tom_cat_xie_jxdy/9838212


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

-Advertisement-
Play Games
更多相關文章
  • 最近公司需要優化導入的問題,由於之前使用的方式是生成 Insert 語句插入資料庫,數據量小的時候還行,但是隨著發展數據量漸漸大了,之前的方法性能就跟不上了,於是發現了 SqlBulkCopy 這個類。 使用 SqlBulkCopy 類只能向 SQL Server 表寫入數據。但是,數據源不限於 S ...
  • 一.寫在前面 半年以前,第一次在項目上實踐VueJs,由於在那之前,沒有Angular,avalon等框架的實踐經驗,所以在Vue的使用上,沒有給自己總結出更多的經驗和體驗。隨著項目進行和優化改版,無論是新代碼的增加還是舊代碼,在功能的實現和代碼的書寫上,Vue逐漸替代了Jquery,除了有些不容易 ...
  • CLR中說道,不要在構造函數中調用虛方法,原因是假如被實例化的類型重寫了虛方法,就會執行派生類型對虛方法的實現。但在這個時候,尚未完成對繼承層次結構中所有欄位的初始化。所以,調用虛方法會導致不可預測的行為。歸根結底,這是由於調虛方法時,直到運行時之前,都不會選擇執行該方法的實際類型。 在MSDN中, ...
  • 如果只是使用現有的WPF控制項的話,是很難滿足當前社會多複雜的業務。所以用戶自己訂製一系列控制項也是一種不可避免的情勢。WPF在控制方面分為倆種:用戶控制項和自定義控制項。相信看過前面章節的就明白他們倆者之間的差別。理解用戶控制項並不難——把現有的控制項組合在一起形成的控制項。而在筆者看來自定義控制項才是WPF最吸 ...
  • 先說說 asp.net core 預設的多語言和國際化。 官方文檔 一:基本使用方法 先要安裝 包 Microsoft.AspNetCore.Mvc.Localization (依賴 Microsoft.Extensions.Localization) 然後使用 資源文件保存不同的語言對應的數據。 ...
  • asp.net core 頁面 TagHelper 的 Id 和 Name 屬性擴展 。 原博客鏈接 : https://blog.wuliping.cn/post/aspnet-core-taghelper-extensions-for-id-and-name ...
  • 考慮到 Raspberry Pi 讀取模擬信號是很煩人的事情,更何況是在沒人玩的 Windows 10 IoT 下,所以準備正兒八經的寫點東西。 需求:使用 Raspberry Pi 讀取輸出模擬信號的 MQ 系列氣體感測器。(GitHub:https://github.com/ZhangGaoxi ...
  • 上節談了談Netop.Core的對於應用系統的配置信息的處理,對於Netop.Core最核心的服務--類工廠/對象查找服務當然要用到配置服務,等下會說到。 對於NET類工廠/對象查找服務,名氣大的有Spring.Net(對應於Java的Spring--號稱輕量級中間件),為什麼還要再造一個輪子呢?如 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...