Postsharp MethodInterceptionAspect获取方法返回值

时间:2017-03-29 11:13:59

标签: postsharp method-interception

我有MethodInterceptionAspect (PostSharp)的实现 但是当我在覆盖OnInvoke方法中时,args.Method为空, 我需要知道方法返回值类型

有人知道吗?

[PSerializable]
public class PSHandleRequestAttribute : MethodInterceptionAspect
{
    public PSHandleRequestAttribute(bool readOnly = true) : base()
    {
        ReadOnly = readOnly;
    }

    #region Properties

    protected bool ReadOnly { get; set; }

    #endregion Properties

    #region Public Methods

    public override void OnInvoke(MethodInterceptionArgs args)
    {
        var instance = args.Instance as IBusinessTransaction;
        var method = args.Method;
        if (instance.IsNull())
        {
            throw new Exception("Use PSHandleRequestAttribute only for IBusinessTransaction");
        }

        instance.OpenTransaction();

        try
        {
            args.Proceed();
            //base.OnInvoke(args);
            instance.CommitTransaction();
            return;
        }
        catch (Exception ex)
        {
            var errorMessage = instance.RollbackTransaction(ex);

            return;
        }
    }

    #endregion Public Methods
}

1 个答案:

答案 0 :(得分:1)

PostSharp优化生成的代码,因此当任何地方都没有使用args.Method的值时,优化器会跳过某些操作并将null作为值传递。

在代码中使用该值后,应显示该值。

我还建议您在CompileTimeValidate方法中进行使用验证,并发出构建时错误消息。这样您就可以在构建时捕获可能的错误。请参阅http://doc.postsharp.net/aspect-validation