2009-04-10 1 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

좋은 답변입니다. 속성이 적용된 메소드 내에서 해당 속성에 액세스하여 설정하는 방법이 있습니까? –

+1

불행히도 모든 속성 속성이 컴파일 타임에 설정되어 사용 가능하지 않아야 런타임에 설정할 수 없습니다. –