- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core
如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DorAInterception,
我将从我当时研究的经历,以及我遇到的场景,为大家展示下
聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core
当时遇到的场景
直接上源码
publicinterfaceIEventHandler
TaskboolHandleAsync(IEvent@event);
boolCanHandle(IEvent@event);
publicinterfaceIEventHandlerT:IEventHandler
whereT:class,IEvent
TaskboolHandleAsync(T@event);
boolIEventHandler.CanHandle(IEvent@event)=@event.GetType()==typeof(T);//语言特性:默认实现2025-1-1510:23:10
TaskboolIEventHandler.HandleAsync(IEvent@event)=CanHandle((T)@event)//语言特性:默认实现2025-1-1510:23:10
HandleAsync((T)@event)
:Task.FromResult(false);
publicinterfaceIEvent
publiclongId{get;set;}
publicDateTimeOccurredOn{get;set;}
如上所示的接口定义了一个事件处理接口,其中HandleAsync方法是事件处理的入口,CanHandle方法用于判断事件是否可以处理,在程序解耦、异步、削峰填谷等场景中,如上的接口可以有很多的应用,也可以扩展到内存级别、RabbitMQ、Redis、Kafka、RocketMQ等中间件的适配的事件处理器,以提供更强大的性能和更丰富的应用场景。所以说这是一个比较通用的场景。
我们将为该处理器提供一个检查幂等的拦截器(Idempotent)
AspectCore
事件定义如下
publicclassCatchLoggingOccurredEvent:IEvent
protectedCatchLoggingOccurredEvent()
OccurredOn=DateTime.Now;
publicCatchLoggingOccurredEvent(longid)
:this()
Id=id;
publiclongId{get;set;}
publicDateTimeOccurredOn{get;set;}
事件处理器及Aspecore定义的特性
///summary
////summary
publicclassCatchLoggingOccurredEventHandler
:IEventHandlerCatchLoggingOccurredEvent
[Idempotent]
publicasyncvirtualTaskboolHandleAsync(CatchLoggingOccurredEvent@event)
awaitConsole.Out.WriteLineAsync(${nameof(CatchLoggingOccurredEventHandler)}处理事件:\t事件【{@event.Id}】@@@@@@发生于【{@event.OccurredOn}】
returntrue;
[AttributeUsage(AttributeTargets.Method,AllowMultiple=false,Inherited=false)]
internalclassIdempotentAttribute
:AbstractInterceptorAttribute
publicoverrideasyncTaskInvoke(AspectContextcontext,AspectDelegatenext
您可能关注的文档
最近下载
- 小学英语语法课件- 现在进行时.ppt VIP
- 送电线路工-高级技师.doc VIP
- GB_T 50448-2015水泥基灌浆材料应用技术规范.docx VIP
- IKEA宜家 PÄRUP 派如普(货号804.937.34)安装指南组装说明书.pdf
- 武进区教师心理健康教育全员培训.ppt VIP
- 供热企业运检人员专业知识习题集.pdf VIP
- 高速公路施工标准化管理指南-安全生产.pdf VIP
- GB 55011-2021 城市道路交通工程项目规范.docx VIP
- 2022注册消防工程师继续教育试题答案人员密集场所 .pdf VIP
- 2023年秋学期人教版初中生物七年级上册教学计划附教学进度表.pdf VIP
文档评论(0)