您的位置:首页 > 编程语言 > ASP

【微服务No.3】AOP组件ASPectCore简单使用

2018-06-21 17:30 696 查看
介绍:

AspectCore是.NET标准的基于AOP的跨平台框架【github解释】。主要支持:对方面拦截器,依赖注入集成,Web应用程序,数据验证等的核心支持。

使用实例:

首先安装dll:

Install-Package AspectCore.Core

引用完dll就可以使用了,我们来创建基本的处理类:ErrorCommandAttribute

介绍就不说了,理论我也知道的不多,直接上代码:

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();
}


View Code
与正常的使用类方法看出来了:我们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实现集群轮询(四)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: