使用 Fody 实现 .NET 的静态编织
使用 Fody 实现 .NET 的静态编织 本文介绍了在项目中使用 `OnMethodBoundaryAspect` 基类记录方法日志的经历,以及澄清了之前对项目使用的是 PostSharp 的误解。讨论了面向切面编程(AOP)中的静态编织和动态代理,以及在.NET中使用Fody进行静态编织的实践。展示了使用Fody插件实现静态织入功能的过程,包括编写插件、修改IL代码等细节。通过自定义插件HelloWorld.Fody展示了静态编织的原理和效果。最后总结了静态编织的重要性以及通过IL代码操作插件的实现方式。整体内容涵盖了AOP、Fody插件、IL代码修改等方面的知识。
再话 AOP,从简化缓存操作说起 本文探讨了面向切面编程(AOP)在简化缓存操作中的应用。博主首先介绍了AOP的概念及其相关技术,然后通过一个缓存操作的例子,指出了传统缓存代码存在的问题,即读/写缓存与业务代码的耦合。为了解决这一问题,博主提出了一个基于 `DispatchProxy` 的 AOP 方案,通过创建一个 `CacheableAttribute` 特性,并使用动态代理,实现了在方法调用时自动对返回值进行缓存的功能。该方案使得业务代码中使用缓存变得更加简洁,无需关心缓存的具体实现细节。最后,博主提供了一个示例代码,展示了如何通过 AOP 实现缓存,并提到了其他第三方库如 `Unity`、`Castle`、`AspectCore` 和 `PostSharp`在实现 AOP 时的相似之处。此外,博主还提到了 `EasyCaching` 框架,并鼓励读者在有类似需求时使用该框架,同时也欢迎读者提出更好的想法或思路。
ASP.NET Core gRPC 拦截器的使用技巧分享 gRPC是微软在.NET Core中主推的RPC框架,具有跨语言、高性能、双向流式调用等优点。文章介绍了在.NET Core中使用gRPC拦截器实现日志记录的技巧,包括拦截器类的定义和各种调用方法的重写。通过拦截器实现了对gRPC请求和响应的详细日志记录。同时,展示了如何在服务器端和客户端实现拦截器,以及如何让拦截器生效的方法。文章总结了gRPC拦截器的使用技巧,强调了利用拦截器处理RPC服务调用时的统一处理需求。
又见 AOP 之基于 RealProxy 实现 WCF 动态代理 最近在研究如何同步数据在 Mongodb 和 ElasticSearch 之间,发现历史遗留问题涉及 WCF 动态代理的实现。通过 RealProxy 实现 WCF 动态代理可以解决手写代理类的问题,同时介绍了 Castle.DynamicProxy 的应用,以及迁移到 .NET Core的思路。动态代理通过 AOP 的方式隐藏了底层细节,实现了调用者无需关心 ChannelFactory 等细节,简化了WCF服务调用的过程。通过动态代理,实现了一次编写,多处运行的目的,提高了代码复用性和可维护性。
邂逅 AOP:说说 JavaScript 中的修饰器 本文介绍了 JavaScript 中的修饰器(Decorator),它是 ES7 的一个提案,用于在编译时对类及其方法进行修改,以及实现不同类间共享方法。修饰器与 Python 中的装饰器类似,通过 @ 符号使用。文章通过实例讲解了修饰器如何修饰类和方法,并强调了其在 AOP(面向切面编程)中的应用,如日志记录、运行时间统计和登录检查等。尽管修饰器在 JavaScript 中的应用需要借助 Babel 等工具进行转译,但它为代码复用和模块解耦提供了优雅解决方案。作者表达了对 JavaScript 中修饰器功能的期待和对前端工具链的复杂性的无奈,同时提倡简洁编程,并推荐了一些相关参考文章。
使用 Unity 框架简化应用程序异常处理及日志记录流程 最近在学习一个项目代码,发现项目整体难度中等,涉及完整的前后端流程,发现一些有趣的设计,如采用严谨的错误码、OAuth和JWT实现API资源访问控制以及在JavaScript中使用修饰器特性记录日志等。作者决定通过Unity框架简化应用程序的异常处理和日志记录流程,避免项目中滥用异常处理和重复代码的现象。讨论了Unity框架与AOP,介绍了Unity中的三种拦截器及其应用场景,展示了如何实现LogHandler和ExceptionHandler组件,以及如何使用这些组件。最后,强调了使用AOP机制对项目的影响和依赖注入的重要性。
深入浅出理解 Python 装饰器 本文介绍了Python中装饰器的重要性和使用方法。首先讨论了装饰器的概念,指出装饰器本质上是函数,进而探讨了函数对象和闭包的概念。随后展示了如何使用装饰器来对函数进行修饰,包括调试函数参数和统计函数执行时长等功能。然后对比了代理模式和装饰器模式,指出代理模式强调控制,而装饰器模式强调扩展。最后探讨了装饰器与面向切面编程的联系,提到了在不同语言中实现AOP的方式以及对AOP应用的多样性。文章全面阐述了Python装饰器的相关知识点和与设计模式、AOP等概念的联系,为读者深入理解Python装饰器提供了详尽的内容。