Postsharp MethodInterceptionAspect 获取方法 return 值

Postsharp MethodInterceptionAspect get method return value

我有一个 MethodInterceptionAspect(PostSharp) 的实现 但是当我在 override OnInvoke 方法中时, args.Method 为空, 我需要知道方法 return 值类型,

有人知道吗?

[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
}

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

一旦您在代码中使用该值,该值就会出现。

我还建议您在 CompileTimeValidate 方法中进行使用验证并发出构建时错误消息。这样你会在构建时发现一个可能的错误。参见 http://doc.postsharp.net/aspect-validation