欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C# AOP

发布时间:2024/7/5 C# 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C# AOP 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我在网上看了一下关于AOP的各种介绍,我觉得和我想象的不一样,不可调和啊,我的理解是从拦截来的

,就是管道,管道里面有很多面片,你可以在这些面片里面插入逻辑,这和事件基本是一回事啊,一个过程里面放一些占位方法就ok了

只不过,对于拦截管道来说,他是由很多个切片共同构成的,所以并不是事件那样只是一个命名的契入点占位,这个是其主要区别,而网上那些

介绍说的是什么j8 横截面,举什么j8 日志,和主业务 不相关的,东西需要 放在主业务周围的时候 有很多类都有这样的共同需求的时候就是AOP要解决的问题

 

完全 是两回事,有些人还用很复杂 的技术 写泥码一弯弯,想看死人啊,什么IL,Attribute,Emit,Remoting,。。。 真泥码h上天了...

 

所以我愤然写下这篇日志,拒绝那些网上说的AOP概念 其实是豪无卵用的破玩意儿,我们还是就关注,管道和拦截吧

如何才能。。象wcf里,象更高阶更成熟 的.net core中间件那样来玩,切面,管道,才是真要所在啊,这方面我还下不了嘴,不过感觉

学会了会很受用啊

希望知音来和我一起分析 分析 !

我下面贴下 初步模拟aop 模型,

using System; using System.Collections.Generic; using System.Threading.Tasks;namespace myaop{public class AopModel{public Action<Pipe> ConfigPipe;Pipe instance;public Context Run(Context ctx){this.instance=new Pipe(ctx);this.ConfigPipe?.Invoke(this.instance);foreach(var i in this.instance.aspects){i.Invoke(this.instance.ctx);}return this.instance.ctx;}}public class Pipe{public List<Aspect> aspects;public Context ctx;public Pipe(Context ctx){this.ctx=ctx;this.aspects=new List<Aspect>();}}public class Context{public int state1;public int state2;public int state3;}public delegate Task Aspect(Context context); } using System; using System.Threading.Tasks;namespace myaop{public class Program{static public void Main(params string[] args){Console.WriteLine("aop test is start.");var aop=new AopModel();aop.ConfigPipe=(pipe)=>{//来个加减乘除pipe.aspects.Add(ctx=>{return Task.Run(()=>{ctx.state3=ctx.state1+ctx.state2;});});pipe.aspects.Add(ctx=>{return Task.Run(()=>{ctx.state3=ctx.state3-ctx.state2;});});// pipe.aspects.Add(ctx=>{return Task.Run(()=>{// ctx.state3=ctx.state3*ctx.state2;// });});pipe.aspects.Add(ctx=>{return Task.Run(()=>{ctx.state3=ctx.state3/ctx.state2;});});};var resualt=aop.Run(new Context{state1=5,state2=2});Console.WriteLine(resualt.state3);}} }

 在.net core中间件的设计里面,Context 是一个委托,这就更灵活了,而且 处理连通过 一个 Func<Context,Context>的类型进行传递,这种设计 真的非常不一般 值得细细品味!

转载于:https://www.cnblogs.com/ProjectDD/p/10915552.html

总结

以上是生活随笔为你收集整理的C# AOP的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。