PostSharp如何在运行时知道某个方面是否应用于某个方法?

我正在实现PostSharp方面库,无法找到解决以下问题的方法。

假设我们有一个方面将应用于某些方法,而不会应用于其他方法。 我需要一些机制,我可以在运行时使用它来知道方面是否应用于方法。 具体来说, 在运行时确定某个方面是否应用于System.Reflection.MethodBase给定的特定方法的推荐方法是什么?

我想到的第一个解决方案是使PostSharp标记每个已被此方面修改的方法,并使用自定义属性并在运行时使用methodBase.CustomAttributes 。 这是解决问题的正确方法吗? 或者在PostSharp中已经有一个现成的或更优雅的解决方案。

另外,请注意首选的解决方案不需要付费的PostSharp许可证,因为Free Community Edition足以支持我当前的项目。 无论如何,讨论基于付费PostSharpfunction的解决方案也是非常有意义的。

当您在类或程序集级别添加方法级方面(例如OnExceptionAspect )作为属性时,PostSharp会将此属性多播到该类/程序集中的所有适用方法。 在下一阶段,方面使用属性转换每个方法,并删除属性本身。

您可以通过将MulticastAttributeUsageAttribute.PersistMetaData属性设置为true来告诉PostSharp保留所有方面属性。 必须将[MulticastAttributeUsage]属性应用于方面类。

 [MulticastAttributeUsage( PersistMetaData = true )] public class MyAspect : OnExceptionAspect { // ... } 

现在,您可以在MethodBase.CustomAttributes查找MyAspect ,以确定该方面是否已应用于当前方法。