Microsoft是否正在为C#中的AOP解决方案?什么是(真正的AOP)替代品?
奖金问题:代码合约是一种AOP吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
.net中的大多数依赖注入框架都能够使用AOP技术,我个人更喜欢Ninject和Interceptor插件,因为它易于使用,并且不需要任何类别污染第三方属性或任何东西。
据说Spring.net,Castle Windsor和许多其他DI框架支持相同的原理,语法和方法略有不同,有些是xml驱动的,有些是c#驱动的,所以你可以有编译时安全性。
有一点需要考虑的是,大多数DI框架都是通过类代理来实现的,所以它们需要你的方法是虚拟的,然后在运行时它代理你的类方法,你可以在那时拦截。还有其他一些方法,比如IL编织就是PostSharp所做的,它可以比代理更快,尽管我没有任何测量来支持它。
没有看到奖励问题,对我来说,我会说它不是一个明确的答案,因为它取决于你如何使用它,因为通常你使用AOP作为分离你的非功能性问题的方法,如记录,事务可能是从你的源代码验证,所以你从外面添加这个逻辑,所以理想情况下你的源代码不知道AOP正在发生(虽然如果你使用一些第三方属性,情况并非总是如此你的源代码到AOP框架)。
由于代码契约可以与现有类一起编写或者挂在via属性中,或者我相信可以在运行时完全注入,就像日志关注点可以将它们全部放入类中但是当使用AOP方法时你不会。因此,对我来说,代码契约只是一种强制执行某些功能的工具,您可以以AOP方式使用它,或者您可以将其嵌入代码中。
答案 2 :(得分:0)
作为替代方案,您也可以使用Spring AOP
链接:http://static.springsource.org/spring/docs/2.0.x/reference/aop.html
Nota:我更喜欢Unity