我想知道使用MethodDecorator是否可以在OnException期间获得传递的参数...这将是很好的,因为如果我能捕获异常,我也可以传递参数值
考虑这段代码
static void Main(string[] args)
{
Worker worker = new Worker();
worker.DoWork(6);
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Assembly | AttributeTargets.Module)]
public class LoggableAttribute : Attribute, IMethodDecorator
{
public void OnEntry(System.Reflection.MethodBase method)
{
var args = method.GetParameters();
var arguments = method.GetGenericArguments();
}
public void OnExit(System.Reflection.MethodBase method)
{
}
public void OnException(System.Reflection.MethodBase method, Exception exception)
{
}
}
和
public class Worker
{
[Loggable]
public void DoWork(int i )
{
}
}
我希望在OnEntry / Nor OnException上有6个
由于
答案 0 :(得分:2)
我知道这是一个老问题,但是如果有人像我一样偶然发现了这个问题,你可以添加一个Init方法并在那里捕获参数值。 e.g:
public class LoggableAttribute : Attribute, IMethodDecorator
{
private object[] arguments;
public void Init(object instance, MethodBase method, object[] args) {
this.arguments = args;
}
public void OnEntry()
{
// this.arguments[0] would be 6 when calling worker.DoWork(6);
}
}
上的示例