2

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

谢谢

4

1 回答 1

3

我知道这是一个老问题,但如果有人像我一样偶然发现这个问题,您可以添加一个 Init 方法并在那里捕获参数值。例如:

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上的示例

于 2016-08-15T11:17:35.797 回答