日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Autofac的AOP面向切面编程研究

發(fā)布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Autofac的AOP面向切面编程研究 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我的理解是 把系統(tǒng)性的編程工作封裝起來 =》我給這個取個名字叫 “Aspect”,然后通過AOP技術(shù)把它切進(jìn)我們的業(yè)務(wù)邏輯代碼 =》 “業(yè)務(wù)“

這樣的好處:

“Aspect” 和 “業(yè)務(wù)” 相互獨立,既可以讓“業(yè)務(wù)” 用到了 “Aspect” 又讓2者互相獨立不耦合,多個“業(yè)務(wù)”也能復(fù)用 同一份“Aspect”

舉一個最實用的例子 Transaction 事物

我們經(jīng)常會在業(yè)務(wù)代碼上使用Transaction事物,比如使用TransactionScope:

下面的測試代碼用到了我在維護(hù)的一個開源ORM框架

https://github.com/yuzd/AntData.ORM

示例業(yè)務(wù)代碼:

上面的代碼 就是 插入一個學(xué)校到db 然后拿到主鍵 賦值給 person 再insert到db。在同一個事物里面 要么school 和person 同時插入db 要么都失敗。

實際業(yè)務(wù)代碼肯定比這個要復(fù)雜的多了,比如多個方法在一個事物里面等我這里就舉最簡單的例子。

那么如果每段業(yè)務(wù)邏輯都這么寫的話 會造成重復(fù)性代碼很多,下面我們就嘗試用AOP面向?qū)η械乃枷肴?yōu)化

思考怎樣的方式才是我想要的

示例代碼:

如上圖:我在需要用到事物的方法上面打了一個?EnableTransactionScope?標(biāo)簽 這樣遇到業(yè)務(wù)方法需要用事物包裹的話 都可以打上這個標(biāo)簽

假如要實現(xiàn)這樣的話 得實現(xiàn)以下幾點:

  • 我需要代理類,因為只有代理類才能給業(yè)務(wù)代碼做些手腳(織入我們想要的邏輯包裹)

  • 我需要一個DI容器,因為將實例的生成交給DI容器了會很方面的生成代理類

  • 我希望只是打打標(biāo)簽就能實現(xiàn)以上這些,這樣可視化最好,也方便

  • 朝著目標(biāo)去實現(xiàn)它 Just Do It

    這2個庫都是autofac旗下現(xiàn)成的開源產(chǎn)品,有了這2個庫 就滿足我上面提到的需求1和需求2

    第3點看來得親自動手了

    ????~~

    Autofac.Annotation組件誕生

    這個組件是我維護(hù)的一個開源的autofac擴(kuò)展庫,用來實現(xiàn)打打標(biāo)簽 就能實現(xiàn)一些復(fù)雜的配置!

    2. 如何使用?Autofac.Annotation?幫助實現(xiàn)AOP面向切面編程

    先簡單來個示例代碼:

    更多示例請查閱:https://github.com/yuzd/Autofac.Annotation

    3. 使用織入來實現(xiàn)TransactionScope切面

    新建一個class如下繼承PointcutAttribute 并實現(xiàn)方法:注意:由于是異步環(huán)境 必須使用 new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)

    只需要在在需要事物包裹的方法上打上這個標(biāo)簽 [EnableTransactionScope] 如下圖:

    點我查看以上代碼

    總結(jié)

    使用Autofac.Annotation組件可以很方便的讓我們在業(yè)務(wù)代碼中使用AOP切面,可以自定義實現(xiàn)切入的位置(前置,后置,還是Arround等)

    參考上面代碼,

    • 打了Componet標(biāo)簽就把類注入到autofac容器了

    • 打了Aspect標(biāo)簽就代表該類需要autofac幫我生成代理類

    • 方法上面打了指定的標(biāo)簽(前置,后置,環(huán)繞,PointCut四種)代表要織入的邏輯

    織入類型實現(xiàn)規(guī)則說明
    前置織入繼承AspectBeforeAttribute在進(jìn)入業(yè)務(wù)代碼之前先執(zhí)行【前置織入邏輯-》業(yè)務(wù)代碼】
    后置織入繼承AspectAfterAttribute在業(yè)務(wù)代碼執(zhí)行之后執(zhí)行(即使有異常)【業(yè)務(wù)代碼-》后置織入邏輯】
    環(huán)繞織入繼承AspectAroundAttribute在業(yè)務(wù)代碼之前和之前都執(zhí)行【前置織入邏輯-》業(yè)務(wù)代碼-》后置織入邏輯】
    PointCut織入繼承PointcutAttribute掌控業(yè)務(wù)代碼的執(zhí)行權(quán),這種最靈活【本文的TransactionScope功能就得用到它】

    一個開源的 netcore mvc role management 快速開發(fā)系統(tǒng)(菜單,角色,權(quán)限[精確到按鈕])

    原文鏈接:https://www.cnblogs.com/yudongdong/p/11609262.html


    .NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

    總結(jié)

    以上是生活随笔為你收集整理的Autofac的AOP面向切面编程研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。