程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#制作一個消息攔截器(intercept)1

C#制作一個消息攔截器(intercept)1

編輯:C#入門知識

C#制作一個消息攔截器(intercept)1


首先,我們先要制作一個自定義Attribute,讓他可以具有上下文讀取功能,所以我們這個Attribute類要同時繼承Attribute和IContextAttribute。

接口IContextAttribute中有兩個方法需要實現

1、bool IsContextOK(Context ctx, IConstructionCallMessage msg);

2、void GetPropertiesForNewContext(IConstructionCallMessage msg);

簡單解釋一下這兩個方法:

1、IsContextOK方法是讓我們檢查當前上下文(current context)是否有問題,如果沒有問題返回true,有問題的話返回false,然後該類會去調用GetPropertiesForNewContext

2、GetPropertiesForNewContext 是 系統會自動new一個context ,然後讓我們去做些新環境應該做的事。

    /// 
    /// Some class if you want to intercept,you must mark this attribute.
    /// 
    public class InterceptAttribute : Attribute, IContextAttribute
    {
        public InterceptAttribute()
        {
            Console.WriteLine(" Call 'InterceptAttribute' - 'Constructor'  ");
        }
        public void GetPropertiesForNewContext(IConstructionCallMessage ctorMsg)
        {
            ctorMsg.ContextProperties.Add(new InterceptProperty());
        }
        public bool IsContextOK(Context ctx, IConstructionCallMessage ctorMsg)
        {
            InterceptProperty interceptObject = ctx.GetProperty("Intercept") as InterceptProperty;
            
            return interceptObject != null;
        }
    }
ok,這是這個類的實現,要解釋幾點:

1、InterceptAttribute這個類繼承的是Attribute,用於[Attribute]標記用的。

2、InterceptAttribute這個類繼承IContextAttribute,用於給標記上的類獲得上下文權限,然後要實現該接口的兩個方法。

3、IsContextOK方法是去判斷當前是否有“Intercept”這個屬性,因為我們只需要這個屬性,所以只要檢查這個屬性當前上下文有沒有即可,如果有返回true,沒有的話會調用GetPropertiesForNewContext函數。

(我們這裡只做攔截器功能,所以只添加Intercept自定義屬性,當然如果有需要可以添加多個屬性,然後在這個函數中進行相應檢查)

4、如果調用GetPropertiesForNewContext函數,他會讓我們進行新上下文環境的自定義,我在這做了一個操作:在當前的上下文中添加一個屬性,這個屬性就是Intercept。

5、下一章我會實現InterceptProperty這個類,其實這個類就是一個上下文屬性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved