2009-04-10 128 views
13

我有一個簡單的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) {...} 

回答

20

只是聲明屬性

 
[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