将PostSharp方面应用于类中的所有方法以记录方法名称

时间:2013-09-24 10:09:04

标签: c# aop postsharp

我想创建一个我想要应用于类的属性。 在这个类中,如果调用了一个方法,在postharp的OnEntryOnExit方法中,我想记录确切的方法名称,如下所示:

  

“GetPartners开始...”

  

“GetPartners已完成......”

或是否发生异常:

  

“GetPartners方法中出现异常”

有没有解决方案?

1 个答案:

答案 0 :(得分:7)

有几个选项可用于启用方法跟踪。

首先,您可以使用现有的PostSharp诊断模式库,只需添加和配置该库中的[Log]属性:Adding detailed tracing

如果您想创建自己的属性,可以在此处找到一个示例:"PostSharp.Samples.CustomLogging"

基本上,您需要从课程OnMethodBoundaryAspect派生并覆盖方法OnEntryOnExitOnException来撰写您的信息。

为了获得更好的性能,您可以在编译时准备相应的消息,并在处理程序中的运行时重用它们,如示例所示:

public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
{
    string methodName = method.DeclaringType.FullName + "." + method.Name;
    this.enteringMessage = "Entering " + methodName;
    this.exitingMessage = "Exiting " + methodName;
}