基於微軟企業庫的AOP元件 含原始碼

2021-09-22 16:52:46 字數 2083 閱讀 5413

軟體開發,離不開對日誌的操作。日誌可以幫助我們查詢和檢測問題,比較傳統的日誌是在方法執行前或後,手動呼叫日誌**儲存。但自從aop出現後,我們就可以避免這種繁瑣但又必須要實現的方式。本文是在微軟企業庫的aop基礎上封裝出的元件。注意:是使用2.0版本,因為2.0以上版本是基於net4.5類庫的。好了,廢話不多說。如圖-1所示

圖-1說明

logmethodbillmodel檔案,是記錄aop詳細資訊

ibasiccodeservice和basiccodeservice是用於測試的介面和實現類

aoputil是實現aop的類,核心**

繼續分析**。

步驟1,先建立2個特性,用於標記在類和方法上,表示這個類中這個方法需要被aop記錄

/// /// 貼在介面上

///

public class nsaophandlerattribute : handlerattribute

}/// /// 貼在方法上,作用:用於開啟aop功能

/// 開啟aop日誌儲存

///

public class nsaopmethodtomethodhandlerattribute : system.attribute

步驟2,繼承icallhandler介面實現aop功能

public class nsaopcallhandler : icallhandler

public imethodreturn invoke(imethodinvocation input, getnexthandlerdelegate getnext)

//獲取方法的層級關係

string parentfullname = null;

string parentdeclaringtype = null;

system.diagnostics.stacktrace st = new system.diagnostics.stacktrace();

system.diagnostics.stackframe sfs = st.getframes();

for (int u = 0; u < sfs.length; ++u)

]: .", u, mb.declaringtype.fullname, mb.name);

//判斷是否包含本方法.若包含,則獲取其下一級的資料即可

string source = mb.name;

if (source == methodname)

break;}}

//記錄至全域性靜態變數

logmethodbillmodel modellog = new logmethodbillmodel()

;baseservice.logmethods.add(modellog);

}return methodreturn;}}

步驟3,就是對介面的使用,當然這裡用的是ioc。如下**所示

/// /// 建立service服務類,基於微軟企業庫

///

///

///

public static t createservice() where t : class

好了,搞定收工。看看呼叫的**。so easy

class program

}

這裡有一點要說明下,就是介面中有方法1(需記錄aop);方法2(不需記錄)。這種情況下,若方法2引用方法1時,也想生成aop的話,需這樣呼叫,直接使用this是不行的

public string singleusercode(string usercode)

public listgetlistusercode(string usercode, string username);}

介紹aop比較全面的部落格

c#高階系列——aop?aop!

2,傳送:示例4008

微軟企業庫4 1學習筆記(十一)企業庫的核心類

在企業庫的很多模組中都實現了很多常用的功能,他們同樣對企業庫以外的應用 也很有用。例如,資料序列化和訪問配置資訊。為了提供可用性,這些 都放在企業庫核心的common程式集中。另外,所有的模組都被設計為最小的依賴,以便他們可以單獨使用。除了unity,所有的企業庫都依賴於企業庫的核心庫,核心庫包含了...

微軟企業庫4 1學習筆記(十一)企業庫的核心類

在企業庫的很多模組中都實現了很多常用的功能,他們同樣對企業庫以外的應用 也很有用。例如,資料序列化和訪問配置資訊。為了提供可用性,這些 都放在企業庫核心的common程式集中。另外,所有的模組都被設計為最小的依賴,以便他們可以單獨使用。除了unity,所有的企業庫都依賴於企業庫的核心庫,核心庫包含了...

微軟企業庫4 1學習筆記(十一)企業庫的核心類

在企業庫的很多模組中都實現了很多常用的功能,他們同樣對企業庫以外的應用 也很有用。例如,資料序列化和訪問配置資訊。為了提供可用性,這些 都放在企業庫核心的common程式集中。另外,所有的模組都被設計為最小的依賴,以便他們可以單獨使用。除了unity,所有的企業庫都依賴於企業庫的核心庫,核心庫包含了...