如何排除构造函数被Namespace广泛方面击中

时间:2013-03-28 13:31:27

标签: postsharp aop

我刚刚开始使用Postsharp作为在项目上进行日志记录等的方法,并且遇到了一个我尚未解决的问题。

在我的项目中,我创建了LogAttribute,正确地记录了我要做的信息,例如参数进出方法。唯一的问题是它也为所有构造函数执行此操作,我不想记录。

有没有办法排除构造函数的退出?

我的GlobalAspects.cs看起来类似于:

using PostSharp.Patterns.Diagnostics;
using PostSharp.Extensibility;

[assembly: TraceAttribute(AttributeTargetTypes = "myNamespace.toLog.*", AttributeTargetTypeAttributes = MulticastAttributes.Public, AttributeTargetMemberAttributes = MulticastAttributes.Public)]

我的属性中的My OnEntry,OnSuccess和On Exception方法都是以下变体:

        StringBuilder output = new StringBuilder();
        output.Append("Entering: ");
        output.Append(this.methodName);

        for (int i = 0; i < args.Arguments.Count; i++)
        {
            output.Append("  Argument: " + i + " - ");
            output.Append(args.Arguments.GetArgument(i) ?? "null");
        }

        m_logger.Trace(output);

1 个答案:

答案 0 :(得分:5)

通过在属性声明中添加以下内容,它似乎解决了问题:

[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
}