Ale*_*mov 4 .net c# reflection aop postsharp
我正在实现PostSharp方面库,无法找到解决以下问题的方法.
假设我们有一个方面将应用于某些方法,而不会应用于其他方法.我需要一些机制,我可以在运行时使用它来知道方面是否应用于方法.具体来说,在运行时确定某个方面是否应用于某个特定方法的推荐方法是System.Reflection.MethodBase什么?
我想到的第一个解决方案是使用自定义属性methodBase.CustomAttributes在运行时使用PostSharp标记已由此方面修改的每个方法.这是解决问题的正确方法吗?或者在PostSharp中已经有一个现成的或更优雅的解决方案.
此外,请注意首选是一种不需要付费PostSharp许可证的解决方案,因为Free Community Edition足以支持我当前的项目.无论如何,讨论基于付费PostSharp功能的解决方案也是非常有意义的.
当您在类或程序集级别添加方法级方面(例如OnExceptionAspect)作为属性时,PostSharp会将此属性多播到该类/程序集中的所有适用方法.在下一阶段,方面使用属性转换每个方法,并删除属性本身.
您可以通过将MulticastAttributeUsageAttribute.PersistMetaData属性设置为true来告诉PostSharp保留所有方面属性.该[MulticastAttributeUsage]属性必须应用于方面类.
[MulticastAttributeUsage( PersistMetaData = true )]
public class MyAspect : OnExceptionAspect
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,你可以看看MyAspect在MethodBase.CustomAttributes确定方面是否已经被应用到当前的方法.
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |