2009-12-01 65 views
3

我不得不放弃使用PostSharp,因为它不适用于混淆/合并的程序集。至少,我没有看到任何方式来让它工作(它崩溃在应用程序启动,当程序集被混淆)
我需要拦截我的应用程序中的一些方法(调用特殊代码而不是原始方法 - OnMethodInvocationAspect)
有什么建议?任何PostSharp替代?

回答

4

PostSharp有所支持ILMerge。请参阅http://www.postsharp.org/blog/postsharp-and-ilmerge。但混淆程序集的问题。

  1. 由于方面在构建时序列化,所以如果方面类型被混淆了,它们就不能被反序列化。解决方案不是混淆任何可序列化的类型。另一种解决方案不是序列化方面(请参阅PostSharp 2.0中的AspectConfigurationAttribute.SerializerType,并使用序列化器MsilAspectSerializer)。

  2. 当方面应用于通用类型的泛型方法和方法时(这是因为PostSharp使用了基于方法名称的反射来解决CLR中的错误)存在问题。

-gael

1

面向方面编程仅仅是程序转换的一个特例。 如果您可以使用工具应用程序转换,则可以轻松执行AOP。

我们的DMS Software Reengineering Toolkit是一个程序转换引擎 ,它可以处理许多真正的语言,包括C,C++,Java,COBOL甚至C#4.0。

有关更多详细信息,请参阅Aspect Oriented Programming using DMS

3

NCop是用于通过邮政夏普启发.NET平台的复合纵横框架

Sheep Aspect 是用于通过AspectJ的

启发
+0

NCop似乎是一个反模式.NET平台替代开源AOP工具。为什么要用IoC风格解析的具体类类型来装饰接口?如果我有多个接口实现,那么每次添加新的实现时,是否需要去更改接口定义? – Hemant 2016-10-13 02:02:02

+0

NCop是一个组合的概念库,而不是IoC库(尽管它封装了IoC的概念)。您只需要用具体的类而不是角色接口来修饰组合类型。请参阅https://github.com/sagifogel/NCop/wiki/Mutliple-mixins – Sagi 2016-10-13 18:59:14