微软企业库5.0-面向切面AOP(PolicyInjection)学习记录 --控制CallHandler的执行顺序

本文介绍了一种自定义拦截器的设计方案,通过实现DangerCallHandler类来在方法调用前询问用户是否继续执行潜在危险的操作,并展示了如何配置执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     

   前一例子演示了自定义属性匹配规则和自定义拦截,现在架设我还需要再进行一次拦截,针对操作询问用户是否要取消方法调用,这样把与用户交互相关的代码也可以抽取出来,否则假设

    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]执行完毕......

 

可以看到,拦截方法的执行顺序正确。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值