《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > DOTNET平臺組件配置工具的設計與實現
DOTNET平臺組件配置工具的設計與實現
來源:微型機與應用2010年第12期
楊 揚
(河南省電力通信自動化公司, 河南 鄭州 450002)
摘要: 在研究了DOTNET平臺Castle框架的基礎上設計出了一個反轉控制(IOC)和面向切面編程(AOP)配置文件自動生成的可視化工具,該工具為程序員快速完成應用系統中IOC和AOP配置文件提供了一個很好的平臺,該工具后來還被作成了插件版本。
Abstract:
Key words :

摘  要: 在研究了DOTNET平臺Castle框架的基礎上設計出了一個反轉控制(IOC)和面向切面編程(AOP)配置文件自動生成的可視化工具,該工具為程序員快速完成應用系統中IOC和AOP配置文件提供了一個很好的平臺,該工具后來還被作成了插件版本。
關鍵詞: RBAC; IOC; Castle; 配置工具

    反轉控制(IOC)和面向切面編程(AOP)技術作為當前比較流行的技術,其優勢已受到廣泛關注,但是這兩項新技術在實際項目上的應用研究卻很落后,而且在.NET平臺下實現這兩項技術沒有形成可以廣泛套用的框架,使得開發人員在.NET平臺下應用IOC和AOP技術的難度和成本大幅度提高。Castle提供了.NET平臺下開發IOC和AOP技術的框架,一定程度上解決了開發人員的難題,但是如何高效地實現IOC和AOP技術的開發,至今無人提出較好的建議。
    本文主要研究Castle框架中的IOC和AOP機制,目標是設計出一個可視化工具,實現IOC和AOP機制中配置文件的可視化配置。該工具經過修改和完善也適用于其他框架中的IOC和AOP配置文件的生成。
1 Castle框架和相關技術介紹
1.1  Castle框架介紹

 Castle是.NET平臺下的一個系統級框架,它是通過將一些成熟開源應用進行無縫整合而形成的一套完善的系統級應用框架,這其中包括了ActiveRecord、AspectSharp、MonoRail及MicroKernel/Windsor。其中MicroKernel是IOC框架的核心;AspectSharp是AOP的框架。
1.2  IOC技術介紹
    反轉控制IOC(Inversion of Control)[1],又稱依賴注入DI(Dependency Injection),是面向對象領域新興的編程思想。簡單地說,IOC就是指由容器來控制程序之間的關系,而非傳統實現中的由程序代碼直接操控。這也就是所謂“反轉控制”的概念所在:控制權由應用代碼轉到外部容器,控制權的轉移,也就是所謂的反轉。
1.3  AOP技術介紹
    AOP[2](Aspect Oriented Programming)是OOP的延續,意思是面向切面編程。可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務、安全、日志等橫切關注。當未來系統變得越來越復雜,橫切關注點就成為一個大問題的時候,AOP就可以很輕松地解決橫切關注點的問題。
2 可視化IOC和AOP配置工具設計思路
 可視化IOC和AOP配置工具是一個在.NET平臺下開發的WinForm程序,這個工具的主要作用就是在IOC組件或者AOP組件都開發好的條件下,利用這個工具生成IOC或者AOP的配置文件,方法是讀取現存的IOC組件或者AOP組件。在工具中進行相應的配置,最后直接生成開發人員所需的配置文件。
 該工具的主要功能是通過讀入現存的IOC組件或AOP組件,提取并暫存組件中與配置有關的重要信息,以可視化的方式顯示在工具界面中,然后由開發人員操作該工具完成組件對應的配置文件的生成。這個過程可以劃分為5個階段(如圖1):讀取類文件>分析類文件>顯示配置信息>開發人員對參數進行配置>生成配置文件。其中前三層是該工具主要實現的功能。因此,該可視化工具的代碼部分分為3個層次來編寫。分別是:讀類文件、分析提取信息、顯示信息。

 第一層主要是完成類文件的讀取,在.NET平臺下使用到了System.IO命名空間中文件操作相關的File類和StreamReader類,最終將整個讀取的文件內容以string類型返回,以供第二層分析文件使用。
 第二層的功能是在第一層的讀取文件內容的基礎上分析并提取關鍵字,即取出配置文件需要的重要信息,例如IOC反轉控制模式主要有設值注入和構造方法注入,設值注入就是對類中的屬性進行注入,而構造方法注入是對構造函數中的參數值進行注入。因此類中的屬性和構造函數的參數就屬于IOC配置文件的重要信息,第二層主要完成對類似的重要信息的識別和分類。在第二層中,完成的識別功能主要有:
    (1) 識別類文件的命名空間、類名、接口名
 命名空間、類名、接口名都是組成IOC和AOP配置文件的必備元素。
 在IOC配置文件中,命名空間、類名、接口名常出現在component標簽的service和type屬性值中,而在AOP的配置文件中命名空間出現在Imports關鍵字之后。所以對命名空間、類名、接口名的提取是生成配置文件的必要條件。
    (2) 識別類文件中的屬性
 IOC反轉控制模式中的設值注入就是對類中的屬性進行注入,如采用該注入模式設計系統,在IOC配置文件中,需要把類中的屬性作為配置文件的標簽。
    (3) 識別類的構造方法中的參數名
 IOC反轉控制模式中的構造注入是對構造函數中的參數值進行注入,如果采用該模式設計系統,在IOC的配置文件中,需要把構造方法的參數名作為配置文件中的標簽。
 以上介紹的是第二層所識別的關鍵字的類別。在程序中關鍵字的獲取主要是通過編寫獲取方法來實現。獲取命名空間使用GetNamespace方法;獲取類名使用GetClass方法;獲取接口名使用GetInterface方法;獲取屬性名使用GetProperty方法。實現的思路是在遵循一定規約的前提下通過屬性在類中的位置特征將其提取出來并且依次保存到一個ArrayList對象中。
 為了保證該可視化工具識別關鍵字的準確性,程序員在編寫IOC組件時要遵循以下規約:
    (1) 要求IOC組件類的修飾符為“Public”
    (2) 要求類中的全局變量都聲明為“Private”
    (3) 要求屬性的修飾符為“Public”
    (4) 要求構造方法的修飾符為“Public”
 第三層是頁面層。主要負責頁面可視化設計。頁面層用到了TreeView、Datagrid、TabControl、ContextMenuStrip等控件。TreeView控件以樹形結構展示了當前讀入的組件;Datagrid控件用來展示選中組件的構造方法參數或屬性,并可以設置其參數值或屬性值;ContextMenuStrip控件用于控制添加和刪除組件操作;TabControl控件則是其他控件的容器。
 以下,對該層使用到的主要控件及其觸發事件按照其重要程度依次做介紹:
    (1) TreeView控件
 該控件的內容占第三層代碼的三分之一,主要涉及到的觸發事件有NodeMouseClick(單擊)、NodeMouseDoubleClick(雙擊)、AfterCheck(復選框被選中)。設計的功能主要有:單擊TreeView控件結點可查看該結點所代表組件的命名空間和類名;雙擊組件可以顯示出該組件的構造方法參數或屬性信息;選中復選框后可以將該組件標簽添加到IOC配置文件中。
    (2) TabControl控件
 該控件主要用于分欄。在該系統中一共用到了2個TabControl控件,第一個用于左欄即控制欄,該欄一共包含了2個TabPage。這兩個TabPage分別作為IOC組件的控制欄和AOP組件的控制欄。第二個TabControl控件作為顯示欄,共包含了3個TabPage:第一個用來顯示IOC的配置信息;第二個用來顯示AOP的配置信息;第三個用來實時地顯示當前正在配置的XML文件。
    (3) Datagrid控件
 Datagrid主要用于分行顯示讀入的構造方法的參數名或者類的屬性名。
    (4) ContextMenuStrip控件
 該控件作為快捷菜單出現在單擊TreeView控件某個結點后,它通常包含2個選項:“添加組件”和“刪除所有組件”。主要使用到的觸發事件就是該控件的單擊事件。
    (5) OpenFileDialog控件
 打開文件對話框控件,在本系統中,用于讀入要配置的組件文件。
    (6) SaveFileDialog控件
 保存文件對話框控件,在本系統中,用于保存配置好的XML文件到指定的位置。
    (7) WebBrowser控件
 Web瀏覽器控件,在本系統中,主要用來實時的顯示當前正在配置的XML文件。
 除了上述設計內容外,還添加了兩個類文件作為頁面層的輔助類。主要負責一些常用的初始化代碼及其輔助性方法代碼,比如配置文件的初始化方法、DataTable的初始化方法、還有DataTable與Arraylist轉換函數等。
 以上主要介紹了可視化配置工具代碼的三層結構。這三層結構是緊密聯系的,層與層之間的代碼是調用與被調用的關系。它們共同完成了可視化工具所需的功能。完成的主要功能有:
 (1) 支持IOC中的構造方法注入和設值注入兩種注入方式。
 (2) 可以對IOC的構造方法參數值或者屬性值進行設置或者修改;支持數組類型的構造參數。
 (3) 可以設置或修改組件ID。
 (4) 可以保存上次關閉時的組件及其狀態信息。
 (5) 支持AOP組件配置:可以在參數設置欄設置攔截器鍵值、自動識別切面的類型等。
 (6) 可以同時配置AOP和IOC組件。
3 可視化配置工具的實現和應用
 通過三層結構,可視化工具就實現了預計的功能:在IOC和AOP組件存在的前提下,使用該工具可以幫助開發人員完成配置文件的生成。
3.1 IOC可視化配置工具的實現
 可視化工具的IOC部分的操作方法和操作步驟如下:
 (1)在左欄Component節點上單擊鼠標右鍵,選擇添加組件,如圖2,即可把組件信息載入進來;如果選擇“刪除所有組件”,就可以把樹型結構中的所有加載的組件刪除,并把IOC配置文件中的該組件標簽的全部信息相應刪除。

 (2)添加完組件后單擊該組件可以查看該組件的命名空間和類名;雙擊組件可以在IOC配置欄中顯示出該組件的構造方法參數或屬性信息。該工具支持兩種IOC配置模式,即設值注入(屬性注入)和構造方法注入。在遵循一定規則的前提下可以自動區分屬性注入或構造方法注入。圖3、圖4展示的是一個設值注入(屬性注入)的實例。


3.2 AOP可視化配置工具的實現
    與IOC不同,AOP的配置也需要讀入相應的類文件,根據AOP的配置特點,要分別讀入攔截器 (Interceptor)、混淆器(Mixin)和切面(Aspect對象),其中Mixin是可選項。
    AOP配置界面中“參數配置”欄可以對Interceptor、Mixin設置別名,這就如同HashTable中鍵和值的一一對應關系,在使用到某個Interceptor或Mixin時可以用它的別名代替。
    “Aspect配置”欄顯示了當前讀入的攔截器 (Interceptor)、混淆器(Mixin)和切面信息。根據Castle中AOP的配置原則進行相應配置后點擊“添加該方面”按鈕就可以生成對應的AOP配置文件,同樣可以查看配置結果。
  圖5、圖6展示了AOP配置的過程。


4 可視化工具的插件版本
  可視化配置工具的插件版本是把先前在.NET平臺下做好的Winform程序做成Sharpdevelop的插件。這是為了滿足更多開發者的需要,Sharpdevelop的靈活和輕巧博得了很多開發人員的喜愛。
  可視化工具插件版本主要由兩個文件構成,一個是Dll文件,負責整個插件的功能邏輯,這部分代碼與.NET下編寫好的代碼基本一致;另一個是Addin文件,負責該插件在Sharpdevelop開發工具中出現的位置和名稱等。該插件位置設置為工具菜單下的最后一個選項。名為“組件裝配”。
    圖7展示了在SharpDevelop平臺下打開“組件裝配”插件后的效果。

參考文獻
[1]     羅時灼.精通Spring[M].北京:電子工業出版社,2005:14-50.
[2]     SHEN Y, CHEN H. Extending SOFL features for AOP  modeling. Engineering of Complex Computer Systems, 2005,5(2):14-15.
[3]     李志純. 面向Aspect編程的應用研究[J].計算機技術與 發展, 2006,16(5):217-219.
[4]     劉曉華. 精通.NET核心技術原理與構架[M]. 北京:電子工業出版社,2002,6.
[5]     張立編著.C# 2.0寶典[M].北京:電子工業出版社,2006.
 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久不射2019中文字幕| 国产精品99久久久久久有的能看| 亚洲第一精品福利| 国产午夜精品一区理论片飘花 | 亚洲人成网站影音先锋播放| 亚洲高清不卡av| 亚洲一区久久久| 99精品热6080yy久久 | 午夜宅男久久久| 亚洲免费影院| 亚洲欧美另类在线观看| 亚洲一区二区三区四区中文| 亚洲一级特黄| 亚洲欧美制服中文字幕| 亚欧成人在线| 久久gogo国模啪啪人体图| 久久av一区二区三区| 欧美综合国产| 亚洲国产精品一区二区第四页av| 亚洲国产三级在线| 亚洲三级性片| 一区二区三区欧美日韩| 亚洲视频一区二区在线观看| 亚洲影视在线播放| 亚洲欧美日韩一区在线| 欧美一区二区三区四区在线| 久久国内精品自在自线400部| 久久久噜噜噜久久| 农村妇女精品| 欧美乱妇高清无乱码| 欧美色播在线播放| 国产免费一区二区三区香蕉精| 国产日韩综合一区二区性色av| 韩国成人福利片在线播放| 伊人夜夜躁av伊人久久| 亚洲国产精品一区在线观看不卡| 日韩小视频在线观看专区| 亚洲一区免费网站| 久久精品二区三区| 日韩一级精品| 午夜激情一区| 久久一综合视频| 欧美另类专区| 国产精品影片在线观看| 精品动漫av| 日韩午夜免费| 欧美一区二区三区免费在线看| 欧美一区二区性| 亚洲精品在线视频观看| 亚洲综合久久久久| 久久久久免费观看| 欧美日韩国产精品一卡| 国产婷婷色综合av蜜臀av| 亚洲福利精品| 在线亚洲一区二区| 久久精品电影| 亚洲一区二区三区午夜| 久久久久久自在自线| 欧美人与性动交a欧美精品| 国产精品私拍pans大尺度在线 | 在线观看一区二区精品视频| 日韩五码在线| 亚洲国产精品久久久久久女王 | 午夜精品视频在线| 欧美成人高清| 国产精品一区二区久久精品 | 亚洲精品日韩久久| 午夜精品久久久久久久99水蜜桃| 久久一区二区三区国产精品| 欧美色图五月天| 国产综合婷婷| 日韩亚洲欧美在线观看| 久久成人综合视频| 亚洲午夜伦理| 欧美va亚洲va香蕉在线| 国产情人综合久久777777| 亚洲全部视频| 久久se精品一区二区| 亚洲一区视频| 欧美激情久久久久久| 国产一区二区高清不卡| 亚洲美女av网站| 亚洲国产精品123| 香蕉av777xxx色综合一区| 欧美激情第10页| 国产亚洲一区二区精品| 一个色综合av| 亚洲免费精品| 美国三级日本三级久久99| 国产精品无码专区在线观看| 亚洲精品国精品久久99热| 久久国产主播精品| 欧美一区二区视频免费观看| 欧美日韩国产在线| 亚洲大片av| 亚洲国产精品va在线看黑人| 香蕉久久夜色精品国产使用方法| 欧美区国产区| 亚洲欧洲日本一区二区三区| 久久国产手机看片| 久久精品国产91精品亚洲| 欧美午夜无遮挡| 亚洲精品一区二区在线观看| 亚洲精品国产视频| 欧美刺激午夜性久久久久久久| 国产手机视频一区二区| 亚洲主播在线| 香蕉久久夜色精品| 国产精品呻吟| 亚洲视频综合在线| 亚洲一区二区免费看| 欧美日韩精品在线| 亚洲精选久久| 一区二区三区久久| 欧美日韩国产首页| 日韩视频在线观看一区二区| 亚洲精品三级| 欧美成人网在线| 亚洲国产精品久久91精品| 亚洲国产欧美一区| 免费在线播放第一区高清av| 一区在线影院| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久精品国产一区二区三| 久久精品国产99国产精品| 国产午夜久久| 久久福利影视| 嫩模写真一区二区三区三州| 亚洲大胆美女视频| 亚洲精品一区二区三| 欧美激情精品久久久久久久变态| 亚洲人成人一区二区在线观看| 亚洲毛片在线| 欧美日韩视频一区二区三区| 亚洲美女在线一区| 亚洲永久在线观看| 国产精品亚洲精品| 欧美一区二区三区免费看| 噜噜噜在线观看免费视频日韩| 亚洲第一综合天堂另类专| 亚洲精品极品| 欧美日韩三区四区| 亚洲一线二线三线久久久| 欧美中文字幕不卡| 韩国av一区二区| 亚洲另类一区二区| 欧美无乱码久久久免费午夜一区| 中文亚洲视频在线| 久久国产视频网站| 亚洲福利视频免费观看| 一区二区三区日韩欧美| 国产精品美女久久久久av超清| 午夜久久久久| 欧美高清不卡在线| 99精品视频一区二区三区| 午夜在线视频一区二区区别| 韩国成人精品a∨在线观看| 亚洲裸体在线观看| 国产精品久久久久9999| 欧美制服丝袜| 欧美精品亚洲精品| 亚洲欧美日韩国产中文在线| 久久综合狠狠综合久久激情| 亚洲精品精选| 欧美在线看片| 亚洲欧洲另类| 久久不射2019中文字幕| 尤物九九久久国产精品的分类| 制服诱惑一区二区| 国产一区二区三区在线观看精品| 亚洲三级国产| 国产女同一区二区| 亚洲精品综合| 国产麻豆精品视频| 99精品国产在热久久| 国产日韩欧美精品在线| 亚洲区一区二区三区| 国产精品日韩一区二区三区| 亚洲精美视频| 国产精品中文在线| 亚洲精品一二三| 国产区精品在线观看| 一本色道久久综合亚洲精品婷婷| 国产欧美精品日韩精品| 亚洲精品视频在线观看网站| 国产欧美日韩激情| 在线性视频日韩欧美| 黄色日韩网站| 午夜久久黄色| 亚洲卡通欧美制服中文| 久久久久久久精| 在线一区欧美| 欧美高清视频在线| 久久精品官网| 国产精品香蕉在线观看| av成人动漫| 亚洲电影在线观看| 久久精品国产精品亚洲精品| aa级大片欧美三级| 欧美大胆人体视频|