我的编程空间,编程开发者的网络收藏夹
学习永远不晚

AOP之PostSharp3-Metho

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

AOP之PostSharp3-Metho

在上两篇我们介绍了OnExceptionAspect和OnMethodBoundaryAspect ,在这节我们将继续了解MethodInterceptionAspect,他为我们提供了关于方法处理的AOP切入,不同于OnMethodBoundaryAspect,他不是边界,是方法体。有了我们可以在我们的方法切入aspect很多有用的信息,比如将同步方法变为异步,防止多次点击重复提交,winform,wpf的多线程调用UI(参见PostSharp - Thread Dispatching(GUI多线程)),长时间操作在超过用户接受时间弹出进度条等等有用的关于用户体验和业务逻辑功能,简化我们的编程开发。

同样我们先来看看其MethodInterceptionAspect定义:

Invoke MethodInterceptionArgs参数:

我们一般使用Proceed是的方法进行处理。在这时我们可以加入线程池调用,使的其变为异步操作。

同时MethodInterceptionAspect 还继承了MethodLevelAspect 的CompileTimeValidate编译是验证,CompileTimeInitialize编译时初始化,RuntimeInitialize运行时初始化,后边的初始化我们将在后面一节PostSharp范围(static和instance中讲到)。

其定义很简单,在于我们的发挥:

二:防止多次提交处理demo:

我们这里只采用简单思路在方法进入禁止按钮可用,方法执行完成后恢复可用状态。我们将使监听winform事件处理方法,按钮来自EventHandle的第一个参数Sender。

 

  1. [Serializable]   
  2.     public class UnMutipleTriggerAttribute : MethodInterceptionAspect   
  3.     {   
  4.          
  5.  
  6. public override bool CompileTimeValidate(System.Reflection.MethodBase method)   
  7.        {   
  8.            var ps = method.GetParameters();   
  9.            if (ps != null && ps.Count() > 0 && ps[0].Name == "sender")   
  10.                return true;   
  11.            return false;   
  12.        }   
  13.  
  14.         public override void OnInvoke(MethodInterceptionArgs args)   
  15.         {   
  16.             if (args.Arguments.Count > 0)   
  17.             {   
  18.                 var controls = args.Arguments[0] as System.Windows.Forms.Control;   
  19.                 if (controls != null && controls.Enabled)   
  20.                 {   
  21.                     controls.Enabled = false;   
  22.                     args.Proceed(); ;   
  23.                     controls.Enabled = true;   
  24.                 }   
  25.             }   
  26.  
  27.         }   
  28.     } 

在这里我们是监听方法的处理事件函数根据vs自动生成规则,第一个参数是sender,事件源,这里利用了CompileTimeValidate在编译时决定是否注入aspect。

注意这里只是一个简单的demo,只针对于同步操作,如要变为异步操作,这需要改为在异步操作后启用。

测试在button点击方法加上attribute:

 
  1. [UnMutipleTriggerAttribute]   
  2.         private void Save(object sender, EventArgs e)   
  3.         {   
  4.             System.Threading.Thread.Sleep(2000);   
  5.         } 

效果:

这个例子很简单的就完成了。

demo下载

参考:

  • AOP之PostSharp初见-OnExceptionAspect
  • AOP之PostSharp2-OnMethodBoundaryAspect
  • AOP之PostSharp3-MethodInterceptionAspect
  • AOP之PostSharp4-实现类INotifyPropertyCh..
  • AOP之PostSharp5-LocationInterceptionAspect
  • AOP之PostSharp6-EventInterceptionAspect..

http://whitewolfblog.blog.51cto.com/addblog.php

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

AOP之PostSharp3-Metho

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

AOP之PostSharp3-Metho

在上两篇我们介绍了OnExceptionAspect和OnMethodBoundaryAspect ,在这节我们将继续了解MethodInterceptionAspect,他为我们提供了关于方法处理的AOP切入,不同于OnMethodBou
2023-01-31

Java_Spring之XML 的 AOP 配置

这篇文章主要介绍了Java_Spring中基于XML的AOP配置,上篇讲到的是基于注解的AOP配置,对XML感兴趣的同学可以参考阅读本文
2023-05-14

Java_Spring之基于注解的AOP配置

这篇文章主要介绍了Java_Spring中基于注解的AOP配置,我们要先进行环境的搭建,在进行注解配置,感兴趣的同学可以参考阅读
2023-05-14

Java Spring之XML的AOP怎么配置

本篇内容主要讲解“Java Spring之XML的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之XML的AOP怎么配置”吧!1 环境搭建示例:在学习 spr
2023-07-05

Spring基础篇之初识DI和AOP

前言  作为从事java开发的码农,Spring的重要性不言而喻,你可能每天都在和Spring框架打交道。Spring恰如其名的,给java应用程序的开发带了春天般的舒爽感觉。Spring,可以说是任何一个java开发者通往技术高阶的必备基
2023-05-30

Spring AOP底层机制之代理模式

如何实现在不修改源码的基础上实现代码功能的增强呢?spring为我们提供了代理模式。所谓的代理模式通俗来说就是一个中介,它给某一个对象提供一个代理对象,并由代理对象控制原对象的引用,从而实现在不修改源码的基础上实现代码功能的增强
2022-11-13

.Net Core AOP之AuthorizeAttribute的作用是什么

AuthorizeAttribute在.Net Core中的作用是用于对控制器或者控制器中的方法进行权限验证。当使用该属性时,只有具有相应权限的用户才能访问被标记的控制器或方法,否则将返回未授权的错误。它是基于声明式授权的一种方式,可以方便
2023-09-26

Java中Spring框架之AOP如何配置

这篇文章主要介绍了Java中Spring框架之AOP如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  什么是AOP  AOP(Aspect Oriented Prog
2023-06-02

Spring框架AOP基础之代理模式详解

代理模式(ProxyParttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下
2022-11-13

Android AOP之注解处理解释器详解(二)

Android APO 注解处理解释器 相关文章: Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android AOP 注解详解及简单使用实例(三) 一、提取Annotatio
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录