我正在实施PostSharp方面库,无法找到解决以下问题的方法。
假设我们有一个方面将应用于某些方法,并且不会应用于其他方法。我需要一些机制,我可以在运行时使用它来知道方面是否应用于方法。具体而言,在运行时确定某个方面是否应用于System.Reflection.MethodBase
给出的特定方法的推荐方法是什么?
我头脑中的第一个解决方案是使PostSharp使用自定义属性标记已由此方面修改的每个方法,并在运行时使用methodBase.CustomAttributes
。这是解决问题的正确方法吗?或者在PostSharp中已经有一个现成的或更优雅的解决方案。
另外,请注意首选的解决方案并不需要付费的PostSharp许可证,因为Free Community Edition足以支持我当前的项目。无论如何,讨论基于付费PostSharp功能的解决方案也是非常有意义的。
答案 0 :(得分:5)
当您在类或程序集级别添加方法级方面(例如OnExceptionAspect)作为属性时,PostSharp multicasts将此属性添加到该类/程序集中的所有适用方法。在下一阶段,方面使用属性转换每个方法,并删除属性本身。
您可以通过将MulticastAttributeUsageAttribute.PersistMetaData属性设置为 true 来告诉PostSharp保留所有方面属性。 [MulticastAttributeUsage]
属性必须应用于方面类。
[MulticastAttributeUsage( PersistMetaData = true )]
public class MyAspect : OnExceptionAspect
{
// ...
}
现在,您可以在MyAspect
中查找MethodBase.CustomAttributes
,以确定该方面是否已应用于当前方法。