MethodDecorator.Fody并获取参数值

时间:2015-06-04 09:24:35

标签: fody

我想知道使用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个

由于

1 个答案:

答案 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);
    }
}

查看https://github.com/Fody/MethodDecorator

上的示例