2012-08-23 154 views
3

我正在學習與Ninject一起使用Interceptor模式。調試攔截器模式

我有一個攔截器如下。

public class MyInterceptor:IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     Console.WriteLine("Pre Execute: " + invocation.Request.Method.Name); 

     invocation.Proceed(); 

     Console.WriteLine("Post Execute: " + invocation.Request.Method.Name); 
     Console.WriteLine("Returned: " + invocation.ReturnValue); 
    } 
} 

我在我的Main方法中設置了我的Ninject內核,如下所示。

kernel = new StandardKernel(); 

kernel.Bind<MyClass>().ToSelf().Intercept().With(new MyInterceptor()); 
myClass = kernel.Get<MyClass>(); 

問題是,調試方法調用myClass,(我把在一份聲明中破發點狀myClass.methodName()並按F11)有堆棧幀的很多傳球,之前我看到了呼叫時到我的攔截器,然後到實際的方法調用。

我也知道Ninject創建動態代理.etc。在幕後,但是這會讓事情變得更加困難,如果我想看看我的代碼的流程,從所有的攔截器到實際的方法。 (想象一下,調試,看看哪個攔截器阻塞的方法調用)

有沒有辦法告訴Visual Studio中沒有對Ninject堆棧幀突破? (我沒有Ninject源跟我反正)

UPDATE 從本質上講,我想要做的就是告訴VS不上碼打破我沒有源...

回答

2

四處尋找在選項對話框中4小時,什麼certailn複選框谷歌搜索後做(多麼複雜,可以由單一的對話框?)我找到了答案。

實際上,你可以告訴Visual Studio中不用擔心「到」他們一定DLL或EXE和的步驟,無需打破並要求源。

這裏是如何做到這一點。

  1. 打開選項對話框中的視覺工作室。 (工具>選項)
  2. 導航到調試>符號部分

或鍵入VS右上角「快速啓動」中的「符號」 2012+和回車。

  • 右下角,選擇 '所有模塊除非排除'

    ScreenCap http://i40.tinypic.com/10gaedt.png

  • 點擊該鏈接並指定要排除的DLL或EXE文件。

  • 添加你 不關心 不想調試模塊。
  • ScreenCap http://i40.tinypic.com/2ecolqb.png

    就我而言,我不得不添加

    • Ninject.dll
      • Ninject核心DLL
    • Ninject.Extensions.Interception.dll
      • 這是Ninject攔截模塊
    • Ninject.Extensions.Interception.DynamicProxy.dll
      • 我使用動態代理實施攔截模塊,而不是執行李林甫。我也不想調試這個。

    從本質上講,這種對話的手段,「我不關心這些DLL。我在調試時忽略它們'。

    似乎你只需要EXE或DLL的名稱,而不是整個路徑。它似乎並不區分大小寫。

    此選項在VS 2010和VS 2012中。如果您有較舊的版本並且需要此功能,那麼可能會走運。在添加後,所有'Step-Into'(F11)命令只會轉到我寫的代碼,並且不會詢問符號,也不會要求我爲Ninject查找源文件。在調用堆棧窗口中,來自這些程序集的所有堆棧幀都合併到一行,名爲'[External Code]'。

    快樂編碼。

    我希望這可以讓你的生活更輕鬆。