例項講解PostSharp(一)

2022-02-12 07:02:48 字數 1885 閱讀 5694

public

class

employee

,密碼:

",employeename,employeepwd);

logmanager.logwrite(

"add");

}}class

logmanager}//

主程式:

static

void

main(

string

args)

);localdatastoreslot localslot 

=thread.allocatenameddataslot(

"principal");

thread.setdata(localslot, gp);

employee em 

=new

employee();

em.add(

"lfm",

"lfm");

}使用postsharp記錄日誌

[serializable]

class

samplelogattribute : onmethodboundaryaspect

}日誌記錄類:

class

logmanager

}然後在需要記錄日誌的方法上標識samplelogattribute即可

相應方法

[samplelog]

public

void

add(

string

employeeid, 

string

pwd)

密碼:"

, employeeid, pwd);

}這時我們執行程式會得到如下結果:

這裡我們需要去了解一下onmethodboundaryaspect類,我們可以通過重寫onentry,onsuccess兩個方法來截獲方法的資訊,onentry是在標識了相應特性的方法前觸發,而onsuccess是在標識了相應特性的方法後觸發。

2、我們可能需要記錄方法的一些更詳細的資訊,比如說更新操作,我們需要記錄更新前的資訊

日誌的記錄特性**如下:

複雜日誌記錄

[serializable]

class

updatelogattribute : onmethodboundaryaspect

,原值:

",item.name,

item.getvalue(eventargs.instance,

null

));}

console.writeline();}}

//業務類:

class

employee

[updatelog]

public

void

update(employee em)

,pwd:",

this

.employeeid,

this

.pwd);

}public

string

employeeid 

public

string

pwd 

}執行主程式結果如下:

也許還有些情況日誌記錄會更複雜,但一般情況下我們都可以通過截獲方法的引數,例項的屬性等獲得想要的資訊。可能你會覺得這樣乙個乙個寫特性也挺麻煩,postsharp提供了一種廣播橫切點的方式,我們可以在類上使用相關的特性然後設定其attributetargetmembers值,如:

[samplelog(attributetargetmembers = "add*")]

class employee

這樣employee類中所有使用add開頭的方法都將記錄日誌,也可以設定整個程式集,大家可以參考postsharp提供的文件。

例項講解PostSharp(一)

public class employee 密碼 employeename,employeepwd logmanager.logwrite add class logmanager 主程式 static void main string args localdatastoreslot localsl...

例項講解PostSharp(二)

新增事務 有些方法可能需要事務支援,我們可能希望事務和業務分開的,也就是說當編寫業務 時根本就不用關心事務,下面我們看乙個場景,乙個銀行帳 戶管理類中有乙個用於轉賬的方法,如下 code class accountmanager public void update intid,account ac...

PL SQL例項講解(一)

題目要求 某加工廠發貨規則是 每車發貨480件,週六週日不發貨,供貨期間除了最後一批貨外其餘只能整車發貨。舉個例子 某廠商需求三天貨,周四需要供貨300,周五需要供貨200,週六需要供貨400,下周一需要供貨200。原發貨表如下 ship date ship qty plan type 2016 1...