C# 通过Attribute制作的一个消息拦截器
首先,我们先要制作一个自己定义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 ,然后让我们去做些新环境应该做的事。
- /// <summary>
- /// Some class if you want to intercept,you must mark this attribute.
- /// </summary>
- 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。
C# 通过Attribute制作的一个消息拦截器的更多相关文章
- (转)C#制作一个消息拦截器
首先,我们先要制作一个自定义Attribute,让他可以具有上下文读取功能,所以我们这个Attribute类要同时继承Attribute和IContextAttribute. 接口IContextAt ...
- C#制作一个消息拦截器(intercept)1
首先,我们先要制作一个自己定义Attribute,让他能够具有上下文读取功能,所以我们这个Attribute类要同一时候继承Attribute和IContextAttribute. 接口IContex ...
- 开发openfire 消息拦截器插件PacketInterceptor
开发消息拦截器的步骤跟开发简单插件步骤一样,要开发消息拦截器插件,首先继承PacketInterceptor包拦截类,然后在initializelPlugin()方法中注册拦截器,就可以实现inter ...
- Struts2中一个自定义拦截器的使用
1.自定义的拦截器的类: package it.web.interceptor; import com.opensymphony.xwork2.ActionContext; import com.op ...
- 重温WCF之消息拦截与篡改(八)
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...
- WCF消息拦截,利用消息拦截做身份验证服务
本文参考 http://blog.csdn.net/tcjiaan/article/details/8274493 博客而写 添加对信息处理的类 /// <summary> /// 消 ...
- 传说中的WCF(10):消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...
- 传说中的WCF:消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...
- 自定义HTTP消息拦截
/// <summary> /// HTTP消息拦截器 /// </summary> public class RequestHandler : DelegatingHandl ...
随机推荐
- linux学习笔记之进程间通信
一.基础知识. 1:进程通信基础(interProcess Communication, IPC):管道,FIFO(命名管道),XSI IPC,POSIX 信号量. 2:管道. 1,缺陷. 1)部分系 ...
- jquery 字符个数(数字字母长度记为1,中文记为2,超过长度自动截)
<script type="text/javascript"> //返回val的字节长度 function getByteLen(val) { var len = ...
- <link>: rel, href
Reference: http://www.w3schools.com/tags/tag_link.asp <link> Attributes: Attribute Value Descr ...
- Fragment与Activity
一个Fragment的实例总是和包含它的Activity直接相关. fragment可以通过getActivity() 方法来获得Activity的实例,然后就可以调用一些例如findViewById ...
- 入门指引 - PHP手册笔记
曾经简单的学习过PHP,看的是<PHP和MySQL Web开发>,还有万能的搜索引擎的帮助.这次准备系统的学习一下,参考资料是PHP Manual. PHP能做什么 PHP主要用于服务端的 ...
- 解决C/C++程序执行一闪而过的方法(三种办法)
简述 在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system(“pause”).g ...
- c# 数据导出成excel 方法总结 见标红部分
public void ServiceOrderExport(string data) { StringBuilder sb = new StringBuilder(); Type entityTyp ...
- C++STL_sort
#include<algorithm> #include<iostream> using namespace std; void print(int x) { cout< ...
- 在flash builder 4.6中使用ant编译项目的详细过程
首先要准备APACHE ANT,目前是1.9.2版 可以去这里下载:http://ant.apache.org/bindownload.cgi?Preferred=http://labs.renren ...
- Eclipse上GIT插件EGIT使用
一.安装EGit插件 參考:MyEclipse8.5整合Git 二.EGit配置 配置个人信息 Window > Preferences > Team > Git > Conf ...