C#,VB.net中有很多AOP实现。这是一些AOP实现:
- 后锐
- 城堡动态代理
- 林富
- 博客网
- Aspect.NET
- 企业库3.0策略注入应用程序块
- AspectDNG
- DotSpect(.SPECT)
- 在Spring.NET框架作为其功能的一部分
- 威卡和莫克斯
- 特温特大学对.NET的AOSD解决方案进行了详尽的分析
- Seasar.NET
- 方面#
- 拼图
- 撰写*
- 设定点
- NConcern .NET AOP框架
- ...
.Net中AOP的最佳实现是什么?我应该用什么?
C#,VB.net中有很多AOP实现。这是一些AOP实现:
.Net中AOP的最佳实现是什么?我应该用什么?
Answers:
我认为,如果动态拦截可以满足您的需求,那么Castle Dynamic Proxy是首选解决方案。许多其他希望提供AOP功能的框架在内部使用此框架。通常,大多数现有的IoC容器现在都提供了一些动态的拦截机制(Spring.NET,Castle Windsor,StructureMap等)。如果您已经在使用IoC容器,则可能更容易了解其建议。
如果动态拦截无法满足您的需求(编织密封类,拦截非虚拟调用等),那么您当然希望进行静态编织。PostSharp是此域中的参考。
请注意,它还存在Linfu,可用于利用两种AOP方式。
“最佳”是主观的。
首先,列出所需功能,体系结构等的列表。然后寻找可以满足所需功能的选项,而又不引入不必要的复杂性。例如,有几种是面向接口的:您的代码当前是否面向接口?如果不是这样,则PostSharp可能是一个更好的选择(被编织到原始类中)。但是当然,不能在运行时配置PostSharp。
在.NET中进行面向方面的编程的最佳方法是使用众所周知的设计技术。例如,通过应用SOLID原理,您可以实现允许添加跨领域关注点所需的灵活性和模块化。如果您拥有设计权,那么您甚至可以在没有任何框架的情况下应用大多数跨领域关注点。认为OOP不适合执行AOP是一个谬论。
这里有一些指针:
当您有了正确的抽象之后,向系统添加新的横切关注点只是编写一个新的装饰器类并将其包装在正确的实现上。如果抽象是通用的,则可以将单个装饰器包装在一大类类中(这正是AOP的目的)。
尽管诸如动态代理和代码编织之类的技术可以使设计较差的应用程序更容易工作,但是对于好的设计,确实没有其他选择。迟早您会被烫伤的。这并不意味着不应使用动态代理生成和代码编织。但是,如果没有适当的应用程序设计,那么即使是那些技术也只能提供很少的帮助。