我想在这里要求3个信息:
在Microsoft的 C#(.Net)中,没有面向方面编程(AOP)的集成解决方案是正确的吗?是否有任何此类解决方案正在开发或计划中?
哪些解决方案允许在C#(.Net)中使用面向方面编程(AOP)?它们的优点/缺点是什么?我没有找到任何包含所有可用选项的综合列表和一些信息供我决定使用哪一个.最接近的是这个列表.
什么是(在您看来)考虑以下标准的C#(.Net)的最佳AOP解决方案:
我认为,如果某些内容满足3中的大多数标准,那么它就是常用解决方案的候选者.如果某些现有解决方案符合我的需求,我无处可寻.
Rog*_*son 18
正如Adam Rackis指出的那样,Post#是要走的路,你可以在.NET平台上接近AspectJ.
主要区别显然是AspecJ对方面有语言支持,而Post#是.NET程序集的后编译编织器.(因此没有语言整合)
但是,Post#可以使用连接点,例如字段访问,尝试catch块,调用和函数(即调用者和被调用者)
甚至没有关闭,AspectJ是一种语言,Post#可以使用自定义切入点,但最常见的是使用属性来装饰要切入的方法(eh..grammar?)
校验
一切,但语言支持
校验
检查 - 这是一个后编译编织器
有限的,编织者将生成智能感知信息并显示受影响的方法
如果您需要支持方面的.NET语言,请查看http://aspectsharpcomp.sourceforge.net/samples.htm
关于不同的方法,有几个:
编译后编织,这就是Post#的作用.它只是破坏.NET程序集并注入方面代码.
Real Proxy/MarshallByRefObject.基于远程基础设施.要求您的类继承自基类.表现极差,没有"自我拦截"
动态代理.这就是我的旧库NAspect所使用的.您使用工厂来创建要应用方面的类型的子类.子类将使用接口添加mixin代码并覆盖虚拟方法并注入拦截器代码.
源代码编织.顾名思义,它会在编译之前转换您的源代码.
[编辑]我忘了把这个添加到列表中:
Client -> Interface Proxy -> AOP interception -> Target/Subject
这是AFAIK Spring的功能.
1)和3)是最常见的.他们都有利有弊:
后编译:
优点:
缺点:
无法根据上下文应用方面,也就是说,如果类型受到影响,它将受到整个应用程序的影响.
切入私有的,静态的,密封的结构可能会导致混淆,因为它违反了基本的OO规则.
动态代理:
优点:
上下文,一个典型可以根据上下文应用不同的方面.
易于使用,无需配置或构建步骤.
缺点:
有限的切入点,只能拦截接口成员和虚拟成员
必须使用工厂来创建对象
归档时间: |
|
查看次数: |
9560 次 |
最近记录: |