2017-03-29 155 views
1

我有MethodInterceptionAspect(PostSharp)的實現 但是當我在覆蓋OnInvoke法,args.Method爲null, 我需要知道方法的返回值類型,Postsharp MethodInterceptionAspect獲得方法的返回值

任何人都知道?

[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的值沒有被任何地方使用,優化器跳過某些操作和傳遞空作爲值。

在代碼中使用該值後,該值應該出現。

我還建議您在CompileTimeValidate方法中進行使用驗證併發出編譯時錯誤消息。這樣你就可以捕捉到構建時可能出現的錯誤。請參閱http://doc.postsharp.net/aspect-validation

+0

感謝!,它的工作!,還可以在'CompileTimeValidate'中保存返回值類型,並在運行時使用 – Shoshana