【问题标题】:Debugging Interceptor pattern调试拦截器模式
【发布时间】:2012-08-23 02:33:59
【问题描述】:

我正在学习在 Ninject 中使用拦截器模式。

我有一个拦截器如下。

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 Method 中设置我的 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 源)

更新 本质上,我想做的是告诉 VS 不要破坏我没有源代码的代码......

【问题讨论】:

    标签: c# ninject interceptor ninject-interception


    【解决方案1】:

    在选项对话框中挖掘了 4 个小时并在 Google 上搜索某些复选框的作用(单个对话框可以有多复杂?)后,我找到了答案。

    您实际上可以告诉 Visual Studio 不要担心某些 DLL 或 EXE,并逐步“通过”它们,而无需中断并询问源代码。

    这里是怎么做的。

    1. 在 Visual Studio 中打开选项对话框。 (工具 > 选项)
    2. 导航到调试 > 符号部分

    或者在 VS 2012+ 的右上角“快速启动”框中输入“符号”并回车。

    1. 在右下角,选择“所有模块,除非排除”

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

    2. 单击链接并指定要排除的 DLL 或 EXE。

    3. 添加您不关心不想调试的模块。

    就我而言,我必须添加

    • Ninject.dll
      • Ninject Core DLL
    • Ninject.Extensions.Interception.dll
      • 这是 Ninject 拦截模块
    • Ninject.Extensions.Interception.DynamicProxy.dll
      • 我使用动态代理实现拦截模块,而不是 LinFu 实现。我也不想调试这个。

    基本上,这个对话框的意思是,'我不关心这些 DLL。在我调试时忽略它们'。

    似乎您只需要 EXE 或 DLL 名称,而不是整个路径。而且好像不区分大小写。

    此选项在 VS 2010 和 VS 2012 中提供。如果您有旧版本并需要此功能,可能不走运。

    添加后,所有的“Step-Into”(F11)命令只会转到我编写的代码,不会要求输入符号,也不会要求我找到 Ninject 的源文件。在调用堆栈窗口中,来自这些程序集的所有堆栈帧都合并到名为“[外部代码]”的一行。

    快乐编码。

    我希望这能让你的生活更轻松。

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多