当前位置: 首页 > news >正文

温州高端网站建设公司哪家好微信小程序脚本

温州高端网站建设公司哪家好,微信小程序脚本,wordpress首页缓慢,桂林网红打卡地肉夹馍是什么肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件。.NET常用的AOP有Castle DynamicProxy、AspectCore等#xff0c;以上两种AOP组件都是通过运行时生成一个代理类执行AOP代码的#xff0c;肉夹馍则是在代码编译时直接修… 肉夹馍是什么肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件。.NET常用的AOP有Castle DynamicProxy、AspectCore等以上两种AOP组件都是通过运行时生成一个代理类执行AOP代码的肉夹馍则是在代码编译时直接修改原始方法IL代码在原始方法内织入AOP代码的。.NET静态AOP的组件或许有人使用过PostSharp这是一个功能完善且强大的静态代码织入组件Postsharp有社区版但可惜的是社区版不支持异步方法肉夹馍的实现方式与Postsharp类似同时也支持了异步方法如果你仅仅使用了Postsharp方法层级的AOP代码织入功能可以尝试使用肉夹馍来替代Postsharp。在 上一篇文章 中介绍了1.0.0版本肉夹馍的功能1.0.0版本能够进行的AOP操作主要是日志记录以及APM操作给出的示例项目也是OpenTelemetry的APM项目。在上一篇文章的评论以及github issue中都有朋友询问是否能处理异常以及修改返回值等操作最终拖了较长一段时间于近期发布了1.1.0版本实现了这些功能。快速开始# 添加NuGet引用dotnet add package Rougamo.Fodypublic class TestService{[Fact] public async void Test1(){ var v1 await M1();Assert.Null(v1); var v2 Sum(1, null);Assert.Equal(-1, v2); var v3 await M2();Assert.Empty(v3);}[MuteException] public async Taskstring M1(){ throw new NotImplementedException();}[ArgNullCheck] public int Sum(int? a, int? b){ return a.Value b.Value;}[ReturnNullCheck] public async Taskstring M2(){ await Task.Yield(); return null;} }public class MuteExceptionAttribute : MoAttribute{ public override void OnException(MethodContext context){ if (context.RealReturnType typeof(string)){context.HandledException(this, null);}} }public class ArgNullCheckAttribute : MoAttribute{ public override void OnEntry(MethodContext context){ foreach (var arg in context.Arguments){ if (arg null){context.ReplaceReturnValue(this, -1);}}} }public class ReturnNullCheckAttribute : MoAttribute{ public override void OnSuccess(MethodContext context){ if (context.ReturnValue null){context.ReplaceReturnValue(this, string.Empty);}} }折叠在上面的示例代码中MuteExceptionAttribute重写了OnException通过MethodContext.HandledException表明异常已处理并将返回值设置为nullArgNullCheckAttribute重写了OnEntry通过MethodContext.ReplaceReturnValue设置了返回值由于OnEntry是在执行方法前调用这种方式会在OnEntry执行完毕之后直接将ReplaceReturnValue设置的返回值作为方法的返回值直接返回一般参数验证、缓存逻辑会用到ReturnNullCheckAttribute重写了OnSuccess通过MethodContext.ReplaceReturnValue修改了实际的返回值示例中通过这种方式避免返回null值。注意事项如果方法是async Task那么MethodContext.RealReturnType取值为typeof(void)如果是async TaskT那么取值为typeof(T)但如果返回值为Task或TaskT但并没有使用async写法那么其值就是typeof(Task)或typeof(TaskT)这样设定的好处是你设置的返回值类型与该属性的值相同即可不用考虑方法是否异步不论是异常处理还是设置/修改返回值设置的返回值类型必须与方法定义的返回类型MethodContext.RealReturnType相同类型不同时运行时会报错OnExit中调用MethodContext.ReplaceReturnValue无法修改返回值补充说明在 上一篇文章 中由于是第一篇文章介绍的东西较多部分功能并没有在文章中详细说明本篇由于篇幅较短所以会补上一些说明不过这里也不会介绍全部的详细的介绍可以移步 github(https://github.com/inversionhourglass/Rougamo)Iterator / AsyncIterator 不支持修改返回值和异常处理Iterator和AsyncIterator也就是下面的写法public IEnumerableint Iterator(int count){ yield return 1; yield return 2; yield return 3; }public async IAsyncEnumerableint AsyncIterator(int count){ yield return 3; await Task.Yield(); yield return 2; await Task.Yield(); yield return 1; }之所以不支持是因为它们并不直接返回一个集合而是返回一个状态机(StateMachine)使用foreach迭代时实际每次迭代执行状态机的MoveNext方法获取本次迭代的返回值考虑到实现这种特殊机制的复杂性以及平时使用的频率当前对此种类型不进行支持。Iterator / AsyncIterator 不支持记录返回值同样的Iterator和AsyncIterator默认也无法通过MethodContext.ReturnValue获取方法的返回值但可以通过FodyWeavers.xml的Rougamo节点增加属性配置enumerable-returnstrue来记录Iterator和AsyncIterator的返回值到MethodContext.ReturnValue。Weavers xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationFodyWeavers.xsdRougamo enumerable-returnstrue //Weavers这个设定是因为状态机并没有保存所有的元素到一个集合中每个元素都是一次一次调用MoveNext执行代码返回的如果你使用foreach遍历Iterator或AsyncIterator并且对每次遍历的元素使用玩之后并没有进行保存那么上一个元素可能在你遍历下一个元素时被GC回收。记录它们的返回值的实现方式是额外建立一个集合保存每次迭代的元素值这种方式对上面说的的foreach遍历的情况来说会产生额外的内存消耗而如果迭代器的元素很多或者每个元素本身很占内存那么这种方式可能会额外占用大量内存空间所以开启这个开关前需要考虑一番。最后如果在使用肉夹馍的过程中遇到了什么问题或者希望增加一些什么样的功能欢迎到github(https://github.com/inversionhourglass/Rougamo)里提issue不过对于新功能可能会有一个较长的周期才能完成并发布正式版。随着SourceGenerator的应用越来越广泛Mono.Cecil的应用场景被进一步压缩一开始提到的动态代理现在也能通过SourceGenerator在编译时生成代理类这是一件好事相比晦涩易错的ILSourceGenerator提供的语法树更加方便易懂且不易出错但这并不代表Mono.Cecil应该退场了至少现在不是Mono.Cecil虽然门槛高但他的功能也同样强大直接修改IL是SourceGenerator和Emit所无法做到的至少现在是这样如果在以后的编程之路中遇到了SourceGenerator和Emit无法解决的问题希望你能想起还有Mono.Cecil和Fody这条路如果有时间可以尝试一下也希望肉夹馍这个项目能给你带来一些参考价值。
http://www.zqtcl.cn/news/804575/

相关文章:

  • 商城网站系统建站平台上建设的网站可以融资吗
  • 怎么查网站空间wordpress快速入门
  • 长沙 网站运营德国服务器网站
  • 有动效网站建网站的书籍
  • 网站模版更新公告2023年ppt模板免费
  • 广饶网站建设北京建设工程监督网站
  • 长沙网站建设电话郑州网站空间
  • 做网站是怎样赚钱的网页制作工具按其制作方式有
  • 网站地图在哪里展现电子商务网站需要做那些准备工作
  • 深圳网站设计收费标准中端网站建设公司
  • 有关wordpress教学的网站wordpress返回旧版
  • php做网站弊端wordpress强大播放器
  • 怎么直接做免费网站wordpress如何自建站
  • 中国建设银行建银购网站金堂企业网站建设
  • 手机微网站开发的目的和意义温州公司网站开发
  • 除了外链 还有什么办法使网站提高排名网站建设珠海 新盈科技
  • 几分钟弄清楚php做网站中国风景摄影网
  • 卡片式网站网页设计公司的市场评估
  • 网站开发的感想wordpress水煮鱼
  • 网站开发入门培训机构自豪地采用wordpress更改
  • 手机网站来几个最近的国际新闻大事件
  • 重庆网站开发设计公司电话资源网站优化排名
  • 国土分局网站建设方案外贸seo网站
  • 营销型网站建设易网拓烟台h5网站建设公司
  • PHP网站开发都需要学什么中介网站模板
  • 网站建设与维护模板官方网站建设费用应入什么科目
  • 网站建设企业关键词seo关键词库
  • 美容院网站源码wordpress scandir
  • 长春电商网站建设报价北京创意设计协会网站
  • 企业3合1网站建设公司加强政协网站建设