如何向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; } 
    } 
} 

然后你可以在路上指定它你已经提到。

+0

很好的答案。有没有方法可以在属性应用的方法中访问和设置属性? – 2016-01-28 19:22:46