微软企业库5.0-面向切面AOP(PolicyInjection)学习记录 --控制CallHandler的执行顺序
来源:互联网 发布:腾讯互娱php怎么样 编辑:程序博客网 时间:2024/06/05 06:49
前一例子演示了自定义属性匹配规则和自定义拦截,现在架设我还需要再进行一次拦截,针对操作询问用户是否要取消方法调用,这样把与用户交互相关的代码也可以抽取出来,否则假设
public class Person : IPerson
{
public void Shout(string aa)
{
//这个方法很危险,会修改数据,需要提醒用户确认是否坚持执行
//那么不可可能会在这里加入一些与用户交互的代码
Console.WriteLine(aa);
}
}
而我希望采用与前一例子同样的方式来处理上面的问题,那么我就再实现一个CallBackHandler,如下
[ConfigurationElementType(typeof(CustomCallHandlerData))]
public class DangerCallHandler : ICallHandler
{
public string Message { get; private set; }
public DangerCallHandler(System.Collections.Specialized.NameValueCollection attributes)
{
this.Message = String.IsNullOrEmpty(attributes["Message"]) ?"" : attributes["Message"];
}
public DangerCallHandler(string Message)
{
this.Message = Message;
}
public IMethodReturn Invoke(IMethodInvocation input,GetNextHandlerDelegate getNext)
{
if (input == null) throw newArgumentNullException("input");
if (getNext == null) throw newArgumentNullException("getNext");
Console.WriteLine(Message);
char key = Convert.ToChar(Console.Read());
if (key == 'Y' || key == 'y')
{
var result = getNext()(input, getNext);
return result;
}
throw new Exception("输入无效!");
}
public int Order { get; set; }
}
在配置文件里做如下修改
可以看到,现在有两个Handler,而这时候[Order]就可以起到作用了,用来控制handler的执行顺序,编译,然后运行,输出如下:
用户[]试图执行[Shout]......
确认输入Y,否则输入其它:
y
Hello world ! Come ......
[Shout]执行完毕......
可以看到,拦截方法的执行顺序正确。
- 微软企业库5.0-面向切面AOP(PolicyInjection)学习记录 --控制CallHandler的执行顺序
- 微软企业库5.0-面向切面AOP(PolicyInjection)学习记录--自定义属性匹配来拦截方法
- MVC 过滤器的执行顺序 AOP面向切面编程
- [原创]Enterprise Library Policy Injection Application Block 之四:如何控制CallHandler的执行顺序
- 微软企业库5.0学习笔记(五)引用企业库程序集及企业库的依赖
- 微软企业库5.0学习笔记(五)引用企业库程序集及企业库的依赖
- 记录学习的点滴(Spring控制反转、面向切面编程)
- AOP面向切面的理解
- Spring的面向切面AOP
- AOP-面向切面的编程
- 面向切面的AOP编程
- flex学习记录——控制函数的执行顺序
- Spring学习笔记3--面向切面(AOP)的例子
- Guice 学习(八)AOP (面向切面的编程)
- Spring学习笔记:面向切面(AOP)的基本定义
- spring面向切面编程aop的学习(1)
- Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
- 微软企业库5.0 学习之路——UnityPIAB 通过配置实现AOP
- c++—虚基类
- POJ 2289 二分最大流
- 相对定位
- ——《爱丽丝漫游奇境记》
- 9-2 定义Time类中的<<和>>运算符重载
- 微软企业库5.0-面向切面AOP(PolicyInjection)学习记录 --控制CallHandler的执行顺序
- 将程序设置为开机自动运行
- 触摸屏的校准加入注册表
- 关于对sqlserver进行大量数据操作,连接池满的问题--转载
- Darwin(我的第一道计算几何题)
- 在c语言环境下实现 C++中的getline函数 即在c语言中按行读取
- hadoop入门学习
- 我的时间管理——各种方法
- Windows 邮件槽(MailSlot)