.Net Aop 面向切面编程 Aspect Oriented Program
是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术。
AOP技术利用一种称为“横切”的技术,剖解开封装对象的内部,将影响多个类的公共行为封装到一个可重用的模块中,并将其命名为Aspect切面。 所谓的切面,简单来说就是与业务无关,却为业务模块所共同调用的逻辑,将其封装起来便于减少系统的重复代码,降低模块的耦合度,有利用未来的可操作性和可维护性。
利用AOP可以对业务逻辑各个部分进行隔离,从而使业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率。
写UnitTest也会更好写了。
AOP的使用场景主要包括日志记录、性能统计、安全控制、重试、缓存。
通过使用这个可以把我们的代码变得更简洁。
Aop的实现方式通常用两种,一种是静态织入,在程序编译的时候就把代码插进去。另一个是动态织入,在运行时通过创建代理类来拦截方法调用。
静态织入框架
- PostSharp (要收费的)
- AspectInjector。
- Fody (这个开发难度比较大要对IL比较熟悉,它下面的插件MethodBoundaryAspect.Fody对Aop的支持也是不太理想的,)
- Source Generator (不太算Aop的范围,但是也是可以用来生成代码的)
动态织入的框架有
- AspectCore-Framework
- Autofac.Extras.DynamicProxy
- 还有Asp.net core 本身也是支持 Aop的。我们可以写 middleware, action filter。
在这边我们主要会介绍AspectCore-Framework和AspectInjector, 这两个都是可以用添加Attribute的方式来织入的。
