C# AOP
我在網(wǎng)上看了一下關(guān)于AOP的各種介紹,我覺得和我想象的不一樣,不可調(diào)和啊,我的理解是從攔截來的
,就是管道,管道里面有很多面片,你可以在這些面片里面插入邏輯,這和事件基本是一回事啊,一個(gè)過程里面放一些占位方法就ok了
只不過,對(duì)于攔截管道來說,他是由很多個(gè)切片共同構(gòu)成的,所以并不是事件那樣只是一個(gè)命名的契入點(diǎn)占位,這個(gè)是其主要區(qū)別,而網(wǎng)上那些
介紹說的是什么j8?橫截面,舉什么j8?日志,和主業(yè)務(wù)?不相關(guān)的,東西需要?放在主業(yè)務(wù)周圍的時(shí)候?有很多類都有這樣的共同需求的時(shí)候就是AOP要解決的問題
?
完全?是兩回事,有些人還用很復(fù)雜?的技術(shù)?寫泥碼一彎彎,想看死人啊,什么IL,Attribute,Emit,Remoting,。。。?真泥碼h上天了...
?
所以我憤然寫下這篇日志,拒絕那些網(wǎng)上說的AOP概念?其實(shí)是豪無卵用的破玩意兒,我們還是就關(guān)注,管道和攔截吧
如何才能。。象wcf里,象更高階更成熟?的.net core中間件那樣來玩,切面,管道,才是真要所在啊,這方面我還下不了嘴,不過感覺
學(xué)會(huì)了會(huì)很受用啊
希望知音來和我一起分析?分析 !
我下面貼下?初步模擬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)=>{//來個(gè)加減乘除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中間件的設(shè)計(jì)里面,Context?是一個(gè)委托,這就更靈活了,而且?處理連通過?一個(gè) Func<Context,Context>的類型進(jìn)行傳遞,這種設(shè)計(jì)?真的非常不一般?值得細(xì)細(xì)品味!
轉(zhuǎn)載于:https://www.cnblogs.com/ProjectDD/p/10915552.html
總結(jié)
- 上一篇: Linux或者Mac解压乱码问题
- 下一篇: 创建新DB和新用户DBeaver连接