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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Dora.Interception,为.NET Core度身打造的AOP框架 [5]:轻松地实现与其他AOP框架的整合...

發(fā)布時間:2025/3/21 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dora.Interception,为.NET Core度身打造的AOP框架 [5]:轻松地实现与其他AOP框架的整合... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這里所謂的與第三方AOP框架的整合不是說改變Dora.Interception現(xiàn)有的編程,而是恰好相反,即在不改變現(xiàn)有編程模式下采用第三方AOP框架或者自行實現(xiàn)的攔截機制。雖然我們默認(rèn)提供基于IL Emit實現(xiàn)方式,并且對IL指令進行了深度的優(yōu)化,但是如果我們真的具有更好的選擇,我們可以通過簡單的擴展完成對底層攔截機制改變。

一、IInterceptingProxyFactory

對于Dora.Interception來說,方法調(diào)用之所有能夠被攔截的根源在于我們改變了服務(wù)實例的提供方式,原來的對象被替換成了可被攔截的代理對象。針對代理對象的提供體現(xiàn)在如下這個IInterceptingProxyFactory接口上。如果提供類型體現(xiàn)為一個接口,Wrap方法會被調(diào)用來創(chuàng)建一個封裝目標(biāo)對象的代理(如果不需要被攔截,則直接返回目標(biāo)對象);如果提供類型體現(xiàn)為一個類型,Create方法則被用來實現(xiàn)對代理對象的創(chuàng)建,如果不需要被攔截,方法提供的后面兩個參數(shù)會被用來提供目標(biāo)對象。

public interface IInterceptingProxyFactory {IServiceProvider ServiceProvider { get; }object Wrap(Type typeToIntercept, object target);object Create(Type typeToIntercept, IServiceProvider serviceProvider, Func<object> targetAccessor = null); }

二、InterceptingProxyFactoryBase

Dora.Interception提供了如下一個實現(xiàn)了IInterceptingProxyFactory接口的基類InterceptingProxyFactoryBase。后者幫助我們實現(xiàn)針對攔截器的解析,解析后的攔截器體現(xiàn)為一個InterceptorDecoration對象。作為它的派生類型只需要實現(xiàn)兩個受保護的虛方法Wrap和Create根據(jù)解析出來的攔截器實現(xiàn)可被攔截的代理對象的創(chuàng)建。

public abstract class InterceptingProxyFactoryBase : IInterceptingProxyFactory {public IInterceptorResolver InterceptorResolver { get; }public IServiceProvider ServiceProvider { get; }public InterceptingProxyFactoryBase(IInterceptorResolver interceptorResolver, IServiceProvider serviceProvider); public object Create(Type typeToIntercept, IServiceProvider serviceProvider, Func<object> targetAccessor = null);public object Wrap(Type typeToIntercept, object target);protected virtual bool CanIntercept(Type typeToIntercept);protected abstract object Wrap(Type typeToIntercept, object target, InterceptorDecoration interceptors);protected abstract object Create(Type typeToIntercept, IServiceProvider serviceProvider, InterceptorDecoration interceptors); }

如果所示的是InterceptorDecoration, 我們可以得到應(yīng)用到目標(biāo)類型中所有方法(包括屬性的Get和Set方法)上的攔截器(實際上所有攔截器按照指定順序構(gòu)建而成的攔截器管道,最終體現(xiàn)為一個類型為InterceptorDelegate 的委托對象)。

public sealed class InterceptorDecoration {public InterceptorDelegate GetInterceptor(MethodInfo methodInfo);public MethodInfo GetTargetMethod(MethodInfo methodInfo);public bool IsInterceptable(MethodInfo methodInfo);public IReadOnlyDictionary<int, InterceptorDelegate> Interceptors { get; }public bool IsEmpty { get; }public IReadOnlyDictionary<MethodInfo, MethodBasedInterceptorDecoration> MethodBasedInterceptors { get; }public IReadOnlyDictionary<PropertyInfo, PropertyBasedInterceptorDecoration> PropertyBasedInterceptors { get; } }public class MethodBasedInterceptorDecoration {public InterceptorDelegate Interceptor { get; }public MethodInfo Method { get; } }public class PropertyBasedInterceptorDecoration { public PropertyInfo Property { get; }public MethodBasedInterceptorDecoration GetMethodBasedInterceptor { get; }public MethodBasedInterceptorDecoration SetMethodBasedInterceptor { get; } }

自定義的IInterceptingProxyFactory實現(xiàn)只需要按照普通的服進行注冊即可。

三、針對Castle的集成

由于Castle原生的框架并沒有提供針對Task的支持,所以我們利用另一個名為Castle.Core.AsyncInterceptor將Castle的攔截實現(xiàn)整合到Dora.Interception。具體的實現(xiàn)體現(xiàn)在如下這個DynamicProxyFactory中。該類型對應(yīng)的NuGet包為“Dora.Interception.Castle”。

public class DynamicProxyFactory : InterceptingProxyFactoryBase { public DynamicProxyFactory(IInterceptorResolver interceptorResolver, IServiceProvider serviceProvider);protected override object Create(Type typeToIntercept, IServiceProvider serviceProvider, InterceptorDecoration interceptors);protected override object Wrap(Type typeToIntercept, object target, InterceptorDecoration interceptors); }

如果需要采用基于Caslte的攔截實現(xiàn)機制,我們只需要做如下的設(shè)置即可。

public class Startup {public void ConfigureServices(IServiceCollection services){ services...AddInterception(builder=>builder.SetCastleDynamicProxy());}... }

或者

public class Startup {public IServiceProvider ConfigureServices(IServiceCollection services){ return services....BuildInterceptableServiceProvider(builder=>builder.SetCastleDynamicProxy());}... }

[1]:更加簡練的編程體驗
[2]:基于約定的攔截器定義方式
[3]:多樣性的攔截器應(yīng)用方式
[4]:與依賴注入框架的深度整合
[5]:對攔截機制的靈活定制

作者:蔣金楠
微信公眾賬號:大內(nèi)老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術(shù)資料,可以掃描左邊二維碼(或者長按識別二維碼)關(guān)注個人公眾號)。
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 *****轉(zhuǎn)載:https://www.cnblogs.com/artech/p/dora-interception-05.html

轉(zhuǎn)載于:https://www.cnblogs.com/linybo/p/10053040.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Dora.Interception,为.NET Core度身打造的AOP框架 [5]:轻松地实现与其他AOP框架的整合...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人激情小说网站 | 亚洲精品在线免费观看视频 | 日本一区二区三区免费电影 | 久久av综合网 | 欧美三级一级片 | 成人性生活视频 | 在线观看黄色片网站 | 成人午夜福利一区二区 | 在线观看三区 | 雨宫琴音一区二区三区 | 久久久久久久久久久网 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 中文字幕一区二区在线观看视频 | 国产视频一二三四区 | 丰满少妇一区二区三区专区 | 婷婷另类小说 | 天天激情站 | 亚洲天堂网在线观看视频 | 黄色小视频在线免费看 | 成年人免费网站在线观看 | 调教女m荡骚贱淫故事 | 一区二区精品视频 | 天堂网2014av| 欧美一级专区免费大片 | 国产一区二区视频免费观看 | 日本老妇高潮乱hd | av日韩不卡| 色猫咪av在线 | www.av在线播放| 国产6区 | 18p在线观看 | 最新欧美大片 | 成人久久电影 | 久草久草久草 | 欧美色图第一页 | 香蕉啪啪网 | 亚洲精品白浆 | 天天综合天天添夜夜添狠狠添 | 凹凸日日摸日日碰夜夜 | 亚洲中文一区二区 | 高潮网 | 黑帮大佬和我的三百六十五天 | 狠狠涩| 97精品国产露脸对白 | 中文字幕视频在线观看 | 久久精品国产亚洲av麻豆 | 国产精品久久久久久久久免费软件 | 免费精品视频在线 | 又大又长粗又爽又黄少妇视频 | 婷婷六月丁 | 免费黄网站在线观看 | 少妇被躁爽到高潮无码文 | 久久免| 在线免费av网 | 欧美黄色网 | 人人草人人看 | 岛国精品资源网站 | 亚州av在线播放 | 免费黄色片网站 | 成人在线观看h | 亚洲欧美一区二区三区 | 久久女女| 久久免费视频2 | 免费观看日本 | 日本一区二区欧美 | 手机看片欧美日韩 | 亚洲色图偷 | 黄色美女毛片 | 久久久久亚洲国产 | 亚洲人成无码www久久久 | 国产美女网站 | 色播五月婷婷 | 加勒比伊人 | 亚洲国产精彩视频 | 青青操视频在线观看 | 国产精品久久久久久 | 欧洲视频一区二区三区 | 国产黄色免费网站 | 日本不卡一二三 | 一本大道av伊人久久综合 | 黄色免费网站在线看 | 麻豆乱淫一区二区三区 | 欧美激情动态图 | 狠狠天天 | 欧美日韩亚 | a中文在线 | 91av日本 | 成人做爰9片免费视频 | 一区二区av电影 | 在线视频 中文字幕 | 爱情岛论坛成人 | 亚洲一区精品在线 | 成人h动漫精品一区二区下载 | 中文字幕在线观看三区 | 亚洲欧美精品午睡沙发 | 91香蕉国产在线观看 | 国产午夜免费视频 | 色欧美88888久久久久久影院 | 在线看v片|