2009-04-10 22 views
13

Ben basit PostSharp günlüğü özelliği vardır:PostSharp özniteliklerine nasıl argüman eklerim?

[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); 
    } 
} 

Ben günlük girişine yöntemler argümanlar hakkında bilgiler ekleyerek bu özellik daha esnek olmasını istiyoruz ama onun Yalnızca gerekirse.

[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 ile sahte kod nasıl yapılacağından emin değilim. Bunu özneye nasıl aktarabilirim? Böyle bir şey bakmak için bekliyorum ama nitelik kodu içine nasıl ele biliyorum don:

[MethodLogging(ShowParameters=true)] 
public void SomeCrazyMethod(int CustomerId, string SecretName) {...} 

cevap

20

Sadece bir özellik Sonra

 
[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; } 
    } 
} 

beyan Eğer bir şekilde belirtebilirsiniz sen bahsetti.

+0

Harika cevap. Öznitelik uygulandığı yöntem içinde bu özelliğe erişmek ve ayarlamak için bir yolu var mı? –

+1

Maalesef, özelliklerin tümü çalışma zamanında ayarlanamayacak şekilde derleme zamanında ayarlanmalı ve kullanılabilir olmalıdır. –

İlgili konular