軟體開發,離不開對日誌的操作。日誌可以幫助我們查詢和檢測問題,比較傳統的日誌是在方法執行前或後,手動呼叫日誌**儲存。但自從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,所有的企業庫都依賴於企業庫的核心庫,核心庫包含了...