Postsharp MethodInterceptionAspect получить значение метода, возвращаемое

У меня есть реализация MethodInterceptionAspect(PostSharp) но когда я в переопределении OnInvoke метод, args.Method NULL, мне нужно знать тип возвращаемого значения метода,

кто-нибудь знает о?

[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 ответ

Решение

PostSharp оптимизирует полученный код, поэтому, когда значение args.Method нигде не используется, оптимизатор пропускает некоторые операции и принимает значение NULL в качестве значения.

Как только вы используете значение в своем коде, оно должно появиться.

Я также рекомендую вам сделать проверку использования в CompileTimeValidate метод и выдать сообщение об ошибке времени сборки. Таким образом, вы поймаете возможную ошибку во время сборки. Смотрите http://doc.postsharp.net/aspect-validation.

Другие вопросы по тегам