2017-02-25 20 views
0

我正在嘗試使用MVC項目簡單的AOP方法。安裝postharp express版本和數據包。我有2個項目,第一個是方面模塊,第二個是休閒mvc項目。AOP Postposers - Aspect attributes not working

所以我創建的postsharp提供

[Serializable] 
public class LogAttribute : OnMethodBoundaryAspect 
    { 
     public LogAttribute() 
     { 
     } 
     public override void OnEntry(MethodExecutionArgs args) 
     {     
      Log.Instance.Info(args.Arguments[0]); 

      base.OnEntry(args); 
     } 

     public override void OnExit(MethodExecutionArgs args) 
     { 
      Log.Instance.Info(args.Arguments[0]); 
      base.OnExit(args); 
     } 

     public override void OnException(MethodExecutionArgs args) 
     { 
      Log.Instance.Error(args.Exception,args.Method.Name); 
      base.OnException(args); 
     } 
    } 

用方面的自定義日誌屬性,這是我的HomeController

[Log] 
    public class HomeController : Controller 
    { 

     public HomeController() 
     { 
     } 

     public ActionResult Index() 
     { 
      Debug.WriteLine("start");    
      return View(); 
     } 
} 

Postsharp文件很清楚,但我的屬性從不打任何方法。我嘗試過各種屬性用法和其他東西,但仍然沒有任何反應。 我也嘗試檢查我的控制器的IL代碼有和沒有日誌屬性。實際上,似乎沒有來自postsharp屬性的額外代碼。 P.S. :是的,我嘗試了清理和重建(就像數百萬次)。

+0

在開始在ASP.NET MVC中使用自定義過濾器之前,您應該在FilterConfig類中註冊它。本文[MVC中的過濾器](http://www.tutorialsteacher.com/mvc/filters-in-asp。 net-mvc)描述瞭如何在ASP.NET MVC中創建,註冊和使用自定義過濾器。 –

+0

它不是一個標準的屬性類,順便說一句,我第一件事,但嘗試,但仍然相同。 postsharp必須在我的操作之前注入字節碼屬性onentry動作。我檢查我的字節代碼後沒有任何變化加入 –

+0

請首先檢查PostSharp是否在構建時運行。在構建日誌中應該有來自PostSharp的消息。 PostSharp NuGet包是否已成功安裝到您的項目中?在* .csproj文件中應該有引用PostSharp.targets的Import行。 – AlexD

回答

0

經過艱難的嘗試,我想出了它。當我們想在我們的項目上使用Postsharp時,我們必須添加Postsharp VS擴展。安裝postsharp擴展後,我們必須登錄並檢查我們的postharp策略,以使用postsharp屬性(或自定義派生的postharp屬性)來定位我們的類。 正在提交快速版本10的目標課。在編譯檢查postharp進程的輸出後,如果成功,postharp將IL代碼注入我們用方法屬性標記的方法。 如果我們所做的一切都正確,我們可以獲得會話,用戶等任何事情都可以記錄而不用任何解決方法,也提供了簡單的緩存機制。

其全部關於postsharp VS Extension &策略設置。