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类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值