我刚刚开始使用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);
答案 0 :(得分:5)
通过在属性声明中添加以下内容,它似乎解决了问题:
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
}