如何向PostSharp属性添加参数?
问题描述:
我有一个简单的PostSharp日志记录属性:如何向PostSharp属性添加参数?
[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
private ILog _logger;
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{
_logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
_logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
}
}
我想使加入的内容与方法参数的日志条目信息,此属性更灵活,但只有当它的需要。
[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
private ILog _logger;
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{
_logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
// if ShowParameters = true
_logger.DebugFormat("Entered {0} with args:{1}", eventArgs.Method.Name, args);
// else
_logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
// endif
}
}
与IF的伪代码是我不知道该怎么做。我如何将它传递给属性?我希望它看起来是这样,但我不知道如何处理它的属性里面的代码:
[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}
答
只是声明属性
[Serializable] public class MethodLoggingAttribute : OnMethodBoundaryAspect { private ILog _logger; public override void OnEntry(MethodExecutionEventArgs eventArgs) { _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString()); if(ShowParameters = true) { _logger.DebugFormat("Entered {0} with args:{1}", eventArgs.Method.Name, args); } else { _logger.DebugFormat("Entered {0}", eventArgs.Method.Name); } } private bool m_ShowParameters; public bool ShowParameters { get { return m_ShowParameters; } set { m_ShowParameters = value; } } }
然后你可以在路上指定它你已经提到。
很好的答案。有没有方法可以在属性应用的方法中访问和设置属性? – 2016-01-28 19:22:46