Ho un semplice attributo di registrazione PostSharp:Come aggiungere argomenti agli attributi 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);
}
}
Voglio fare questo attributo più flessibile con l'aggiunta di informazioni sui metodi di argomenti alla voce di registro, ma solo se il suo bisogno.
[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
}
}
Lo pseudo codice con IF è quello che non so come fare. Come posso passare questo attributo? Mi aspettavo di essere simile a questo, ma io don sapere come gestire all'interno del codice di attributo:
[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}
Ottima risposta. C'è un modo per accedere e impostare quella proprietà all'interno del metodo in cui viene applicato l'attributo? –
Purtroppo non tutte le proprietà degli attributi devono essere impostate e disponibili al momento della compilazione, quindi non è possibile impostarle in fase di runtime. –