首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Attribute 實現 AOP 事務(四):TransactionAttribute 繼承 ContextAttribute 與 IContributeObjectSink、GetObjectSink 注入 TransactionAop、TransactionMethodAttribute 標記方法

     編輯:關於C語言

TransactionAttribute:類別層級標記


[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public sealed class TransactionAttribute : ContextAttribute, IContributeObjectSink
{
    public TransactionAttribute() : base("Transaction") { }

    public IMessageSink GetObjectSink(MarshalByRefObject obj, IMessageSink next)
        => new TransactionAop(next); // 注入攔截器
}
  • 繼承 ContextAttribute(已實作 IContextProperty)。
  • 實作 IContributeObjectSink.GetObjectSink 回傳 TransactionAop 串接至訊息鏈。

TransactionMethodAttribute:方法層級標記


[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class TransactionMethodAttribute : Attribute
{
    public TransactionMethodAttribute() { }
}

使用方式


[Transaction]
public class UserInfoAction : SqlDAL
{
    [TransactionMethod]
    public void Add(UserInfo user) { ... }
}

類別標記 [Transaction] 註入攔截器,方法標記 [TransactionMethod] 指定哪些方法需交易。發現類別層級 Attribute 會被實例化,方法層級不會,故需雙重標記確保攔截器啟用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved