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

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

編輯:C#入門知識

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


好了,接著上一篇文章,我們要實現一個InterceptProperty類。

先講一下,這個類我們要繼承兩個接口IContextProperty和IContributeObjectSink

IContextProperty:這個接口是說明該類是一個上下文屬性,他其中有兩個方法IsNewContextOK和Freeze

1、Freeze()該方法用來定位被創建的Context的最後位置,一般不用寫入什麼邏輯。

2、IsNewContextOK()這個方法讓我們檢驗:我們對當前新Context是否滿意。滿意返回true,不滿意false則會異常,我們再進行處理。

IContributeObjectSink: 這個接口是是一個消息池,只有繼承這個接口我們才能接收Object消息。

當然也有IContributeEnvoySink,IContributeClientContextSink,IContributeServerContextSink,這些消息池,能接收不同形式的消息,在這裡不過多解釋。

1、IContributeObjectSink 裡面的 GetObjectSink()方法需要我們去實現,主要作用是得到一個消息池的對象。


好,話不多說,直接貼代碼:

//IContributeObjectSink,IContributeEnvoySink,IContributeClientContextSink,IContributeServerContextSink
    public class InterceptProperty:IContextProperty,IContributeObjectSink
    {
        public InterceptProperty()
        {
            Console.WriteLine(" Call 'InterceptProperty' - 'Constructor'  ");
        }
        public string Name { 
            get
            {
                return "Intercept";
            }
        }
        public void Freeze(Context newContext)
        {

        }
        public bool IsNewContextOK(Context newCtx)
        {
            var result = newCtx.GetProperty("Intercept");
            return result!=null;
            //return false;
        }

        public IMessageSink GetObjectSink(MarshalByRefObject obj, IMessageSink nextSink)
        {
            InterceptSink interceptSink = new InterceptSink(nextSink);
            return interceptSink;
        }
    }
簡單解釋一下,IsNewContextOK() 函數中,我主要是在當前新的上下文中獲得我想要的Intercept屬性,正常情況下,系統會構造出InterceptProperty對象,GetProperty()函數就是get出Name屬性是否匹配,如果匹配則return true,否則異常。
另外的GetObjectSink方法則是得到一個InterceptSink的對象,下一節我會實現InterceptSink類。

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