在C#、VB.net中有很多面向方面的实现。这是一些AOP实现:
Twente University
C48<提供了作为其functionality
Wicca
和Phx.Morph
An exhaustive analysis on AOSD solutions for .NET
一部分的
PostSharp
Castle DynamicProxy
LinFu
LOOM.NET
Aspect.NET
Enterprise Library 3.0 Policy Injection Application Block
AspectDNG
DotSpect
(.SPECT)
Spring.NET
框架/code>
...
在.Net中实现面向方面编程的最佳方案是什么?我应该使用什么?
发布于 2009-03-11 09:12:31
如果动态拦截能够满足您的需求,我认为Castle Dynamic Proxy是首选的解决方案。这个框架被许多想要提供AOP功能的其他框架在内部使用。通常,大多数现有的IoC容器现在都提供了一些动态拦截机制(Spring.NET、Castle Windsor、StructureMap等)。如果您已经使用过IoC容器,那么查看它的建议可能会更容易一些。
如果动态拦截不能满足您的需求(编织密封类、截获非虚拟调用等),那么您肯定需要静态编织。PostSharp是此域中的参考。
请注意,它还存在Linfu,可用于利用这两种面向方面编程方式。
发布于 2009-03-11 08:20:08
“最好的”是主观的。
首先,列出你需要的特性,你的架构,等等。然后寻找你需要的选项,而不引入不必要的复杂性。例如,有几个是面向接口的:你的代码当前是面向接口的吗?如果不是这样,PostSharp可能是更好的选择(被编织到原始类中)。但当然,PostSharp不能在运行时配置...赛马的课程。
发布于 2012-12-28 07:54:13
在.NET中进行面向方面编程的最好方法是使用众所周知的设计技术。例如,通过应用SOLID principles,您可以获得添加横切关注点所需的灵活性和模块性。如果您的设计正确,您甚至可以在没有任何框架的情况下应用大多数横切关注点。认为OOP不适合做AOP是一种谬误。
以下是一些建议:
当您有了正确的抽象后,向系统添加新的横切关注点只需编写一个新的装饰器类并将其包装在正确的实现中即可。如果抽象是通用的,您可以将单个装饰器包装在一大组类周围(这正是AOP的意义所在)。
虽然像动态代理和代码编织这样的技术可以更容易地处理设计糟糕的应用程序,但对于良好的设计来说,确实没有其他选择。迟早你会被烧死。但是,这并不意味着不应该使用动态代理生成和代码编织。但是,如果没有适当的应用程序设计,即使这些技术也只能起到很小的帮助作用。
https://stackoverflow.com/questions/633710
复制相似问题