【微服务No.3】AOP组件ASPectCore简单使用
介绍:
AspectCore是.NET标准的基于AOP的跨平台框架【github解释】。主要支持:对方面拦截器,依赖注入集成,Web应用程序,数据验证等的核心支持。
使用实例:
首先安装dll:
Install-Package AspectCore.Core
引用完dll就可以使用了,我们来创建基本的处理类:ErrorCommandAttribute
介绍就不说了,理论我也知道的不多,直接上代码:
class ErrorCommandAttribute : AbstractInterceptorAttribute { string _mess; public ErrorCommandAttribute(string methon) { _mess = methon; } /// <summary> /// 每个被拦截的方法中执行 /// </summary> /// <param name="context"></param> /// <param name="next"></param> /// <returns></returns> public override async Task Invoke(AspectContext context, AspectDelegate next) { try { Console.WriteLine("AddAsync方法开始前"); await next(context); // 执行被拦截的方法 } catch (Exception) { Console.WriteLine("AddAsync方法出错"); try { //Type[] mytypes = Assembly.GetExecutingAssembly().GetTypes(); Type type= typeof(User);//user 是类 var methom = Activator.CreateInstance(type);//反射创建类 MethodInfo methodinfo = type.GetMethod(_mess);//获取方法 _mess参数是自定义字符串为方法名称 methodinfo.Invoke(methom, null);//运行方法 } catch (Exception ex) { throw; } throw; } finally { Console.WriteLine("AddAsync方法结束"); } } }
只简单介绍下方法的形式:Invoke
该方法是继承AbstractInterceptorAttribute类之后必须实现得类;
然后try:是在方法执行之前执行;所有我们在检测方法开始之前要想做一些操作可以写在这里
catch:只有在检测的方法出现异常才会执行;这里是检测方法出异常了,需要做的操作,
finally:都会执行
我们再来看一下方法类:user
public class User { [ErrorCommand("Error1")] public virtual async Task<int> AddAsync() { Console.WriteLine("开始方法:AddAsync"); throw new Exception("出错了"); return 0; } public async Task<int> Error1() { Console.WriteLine("开始方法:Error1"); return 1; } }
很明显我们写的特性类只需要在需要检测的方法上面加特性就好了。这里特别注意就是,需要加特性的方法必须是虚方法,也就是必须加virtual 修饰。不然不会被调用。
最后看一下如何使用方法:
static void Main(string[] args) { Console.WriteLine("开始程序"); //User user = new User(); //user.AddAsync(); ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { User p = proxyGenerator.CreateClassProxy<User>(); p.AddAsync(); } Console.ReadLine(); }
与正常的使用类方法看出来了:我们new User类的时候不是传统的方式,必须使用组件的CreateClassProxy方法;
2018-06-23:
修改拦截器方法:
拦截方法从指定类型扩展为公共方法,自定义类型,这样就可以单独提取出来,不用每一个类型写一个类,可以自动获取到类型,然后可以重复使用:
public override async Task Invoke(AspectContext context, AspectDelegate next) { try { Console.WriteLine("AddAsync方法开始前"); await next(context); // 执行被拦截的方法 } catch (Exception) { Console.WriteLine("AddAsync方法出错"); //重复调用示例 ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()) { var baseClass = context.Proxy; foreach (var item in baseClass.GetType().GetMethods()) { if (item.Name.ToString() == _mess) { MethodInfo methodinfo = baseClass.GetType().GetMethod(_mess); methodinfo.Invoke(baseClass, null); } } } throw; } finally { Console.WriteLine("AddAsync方法结束"); } }
系列目录:
微服务系列文章主要介绍微服务所使用到的一些技术和一些技术示例:
- 微服务——微服务的介绍和目录
- 微服务——【Consul】服务发现在windows下简单使用(一)
- 微服务——【polly】微服务故障处理库(二)
- 微服务——动态代理AspectCore的使用(三)
- 微服务——网关Ocelot+Consul实现集群轮询(四)
作者:YanBigFeg —— 颜秉锋
出处:http://www.cnblogs.com/yanbigfeg
本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OWICELLS利用可见光通信测试宝马机器人工装
据报道,弗劳恩霍夫通讯技术研究所率先研制可见光通信(LiFi),该机构在宝马的慕尼黑工厂进行期末专题报告时宣布,其已成功完成OWICELLS项目。 该项目利用快速光纤无线技术替代有线现场总线或常见的无线电方案,旨在制作出更为灵活的制造单元(manufacturing cells),并将其用于汽车工程设计领域内。 而且,他们还利用一个移动式机器人演示了可见光通信技术,该机器人可执行常规的零部件焊接、移动及测试等常规生产工艺,上述操作均在5x5平方米的制造单元内完成。该项功能强大的光纤无线传输的技术基础在于空间多样性(spatial diversity)。换言之,其利用多个LED灯及多个光电二极管(photodiodes)同步完成数据的发送与接收(实际上是一款多输入多输出架构,Multiple-Input Multiple-Output architecture)。
- 下一篇
别光看世界杯 7月还有一场音视频技术盛宴等着你
在全世界球迷的瞩目下,2018世界杯在上周激情上演,相信接下来的一个月时间里无数球迷又将守在电视前为自己喜欢的球队摇旗呐喊。 当然,在移动互联网发达的今天,即使不在电视前,你也可以随时随地掏出手机,打开各种视频 APP 来观看世界杯比赛的现场直播或录播。而随着新时代网民对音视频应用的大流量需求,各大主流运营商也都很积极地推出了不限流量套餐,为火热的视频领域再添一把火。 目前,音视频、社交已成为当下互联网应用的标配,它正在不断丰富着互联网产品形态,深入更多场景创造更多互联网应用想象空间,同时,音视频技术与人工智能技术也在不断入侵和改造着传统行业,加速着各行各业的『互联网+』进程。 在即将召开的 Cloud Insight 2018 云计算行业峰会上,我们将联合国内知名音视频社区 LiveVideoStack 联合定制『音视频技术与场景探索』专场论坛,并邀请LiveVideoStack音视频技术社区创始人 / 主编包研出任出品人,为你精心打造 6 场精彩演讲,分享国内领先的音视频技术解决方案及与最佳应用实践。 在今年的世界杯期间,网络视频成为球迷看球的一个重要渠道。除了可随时随地的看比赛直...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装