Как добавить аргументы в атрибуты 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) {...}
Ответы
Ответ 1
Просто объявите свойство
[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; }
}
}
Затем вы можете указать его так, как вы упомянули.