【问题标题】:Any PostSharp alternative?有任何 PostSharp 替代品吗?
【发布时间】:2010-12-22 01:18:20
【问题描述】:

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

【问题讨论】:

    标签: .net aspects


    【解决方案1】:

    Spring.NET 具有在运行时编织的 AOP 功能,因此应该与混淆的程序集一起使用。

    http://www.springframework.net/

    文档:

    http://www.springframework.net/doc-latest/reference/html/aop.html

    【讨论】:

      【解决方案2】:

      PostSharp 在某种程度上支持 ILMerge。见http://www.postsharp.org/blog/postsharp-and-ilmerge。但是混淆程序集存在问题。

      1. 由于方面是在构建时序列化的,因此如果方面类型已被混淆,则它们无法反序列化。解决方案是不要混淆任何可序列化的类型。另一种解决方案是不序列化切面(参见 PostSharp 2.0 中的 AspectConfigurationAttribute.SerializerType,并使用序列化器 MsilAspectSerializer)。

      2. 将切面应用于泛型方法和泛型类型的方法时会出现问题(原因是 PostSharp 使用基于方法名称的反射来解决 CLR 中的错​​误)。

      【讨论】:

        【解决方案3】:

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

        我们的 DMS 软件再造工具包是一个程序转换引擎 处理许多真实语言,包括 C、C++、Java、COBOL 甚至 C#4.0。

        更多详情请见Aspect Oriented Programming using DMS

        【讨论】:

          【解决方案4】:

          NCop 是受 Post Sharp 启发的 .NET 平台的复合方面框架

          Sheep Aspect 是受 AspectJ 启发的 .NET 平台的替代开源 AOP 工具

          【讨论】:

          • NCop 似乎是一种反模式。为什么要为 IoC 样式解析使用具体的类类型来装饰接口?如果我有多个接口实现,是否每次添加新实现时都需要更改接口定义?
          • NCop 是组合的概念库,而不是 IoC 库(虽然它封装了 IoC 的概念。)您只需要用具体的类而不是角色接口来装饰组合类型。请参考github.com/sagifogel/NCop/wiki/Mutliple-mixins
          猜你喜欢
          • 2012-12-16
          • 1970-01-01
          • 2020-03-16
          • 2020-01-21
          • 2011-07-17
          • 2017-03-05
          • 2021-03-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多