.net中AOP的最佳实现是什么?
在C#,VB.net中有很多的AOP实现。 这是一些AOP的实现:
- PostSharp
- LOOM.NET
- Aspect.NET
- 企业库3.0策略注入应用程序块
- AspectDNG
- DotSpect (.SPECT)
- Spring.NET框架作为其function的一部分
- Wicca和Phx.Morph
- Twente大学提供了针对.NET的AOSD解决scheme的详尽分析
- Seasar.NET
- 方面#
- Puzzle.NAspect
- 撰写*
- 设定点
- NConcern .NET AOP框架
- …
.net中AOP的最佳实现是什么? 我应该用什么?
我认为Castle Dynamic Proxy是dynamic拦截可以处理您的需求的解决scheme。 这个框架在很多其他想要提供AOPfunction的框架内部使用。 通常情况下,大多数现有的IoC容器现在提供了一些dynamic拦截机制(Spring.NET,Castle Windsor,StructureMap等)。如果您已经使用IoC容器,也许可以更容易地查看它提出的内容。
如果dynamic拦截不能满足你的需求(编织密封类,拦截非虚拟呼叫等),那么你一定要静态编织。 PostSharp是这个领域的参考。
请注意,它也存在Linfu ,可用于利用两个AOP时尚。
“最好”是主观的。
首先,列出你需要的function列表,你的架构等。然后寻找你需要的选项,而不会引入不必要的复杂性。 例如,有几个是面向接口的:你的代码是否是当前面向接口的? 如果没有,PostSharp可能是一个更好的select(被编入原始类)。 但是,当然,PostSharp不能在运行时configuration…马匹的课程。
在.NET中进行面向方面编程的最好方法是使用众所周知的devise技术。 例如,通过应用SOLID原则,您可以实现您需要的灵活性和模块化,以允许增加横切关注点。 如果你拥有devise的权利,你甚至可以在没有任何框架的情况下应用大多数的交叉问题。 认为OOP不适合做AOP是一个谬论。
这里有一些指针:
- 不要依赖具体实例,而要依赖抽象。
- 不要将交叉关注和业务逻辑混合在一起。
- 通过在实现这些关注的类( 装饰器 )的类中用业务逻辑包装类来增加横切关注点。
- 在您的devise中find常见的工件,并对其进行build模,最好使用相同types的抽象。 看看这个和这个例子。
当你有了正确的抽象,为系统添加新的交叉关注只是编写一个新的装饰类,并将其包装在正确的实现中。 如果抽象是通用的,你可以围绕一大类类来包装一个装饰器(这正是AOP的意思)。
虽然诸如dynamic代理和代码编织等技术可以使devise不当的应用程序变得更容易,但对于良好的devise来说,确实没有其他select。 迟早你会被烧毁。 这并不意味着dynamic代理生成和代码编织不应该被使用。 但是,如果没有正确的应用程序devise,即使这些技术只会有一点帮助。
我不太了解,有很多的框架,没有足够的时间来尝试所有的一天。
我确实使用了PostSharp,并惊喜地发现它是多么容易。
我也用Castle Windsor和Spring.Net来看AOP,方法不同(运行时间和编译时间)。 混合AOP和IoC似乎是有道理的。 当你不使用这些框架之一,但是开始还有很多工作要做,但是不要让它阻止你。
对于新的项目,现在我可能会使用温莎城堡,但这主要是因为我也想使用IoC。 如果我不得不快速实现AOP到现有的代码库,我会使用PostSharp。
还有微软的政策注入和统一拦截 。