將委托作為參數傳遞,調用端決定是否啟用事務,實現「客戶端控制」的輕量級 AOP。
// 基類定義通用委托
public delegate void VoidDictionaryMethod(Dictionary<string, object> dict);
// 事務執行器
public void TransactionAction(Delegate action, params object[] args) {
using (var conn = new SqlConnection(connStr)) {
conn.Open();
var tran = conn.BeginTransaction();
try {
_sqlTrans = tran;
action.DynamicInvoke(args); // 執行業務邏輯
tran.Commit();
} catch {
tran.Rollback();
} finally {
_sqlTrans = null;
}
}
}
// 調用端
var uiAction = new UserInfoAction();
var dict = new Dictionary<string, object> { {"Username","abc"}, {"Password","123"} };
// 普通調用
// uiAction.Add(dict);
// 事務調用:調用端決定
uiAction.TransactionAction(new UserInfoAction.VoidDictionaryMethod(uiAction.Add), dict);