que tienen un simple atributo de registro PostSharp:¿Cómo agrego argumentos a los atributos de 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);
}
}
Quiero hacer este atributo más flexible mediante la adición de información sobre los métodos de argumentos a la entrada del registro, pero sólo si su necesaria.
[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
}
}
El pseudo código con el IF es lo que no estoy seguro de cómo hacer. ¿Cómo puedo pasar esto al atributo? Estoy esperando a ser algo como esto, pero yo no sé cómo manejarlo en el código de atributo:
[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}
Gran respuesta. ¿Hay alguna manera de acceder y establecer esa propiedad dentro del método donde se aplica el atributo? –
Desafortunadamente, no todas las propiedades de atributos deben establecerse y estar disponibles en tiempo de compilación para que no pueda establecerlas en tiempo de ejecución. –