Шаблон отладки перехватчика
Я учусь использовать шаблон перехватчика с 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);
}
}
Я настраиваю ядро 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, что он не нарушает код, для которого у меня нет источника...
1 ответ
После 4-часового рытья в диалоговом окне параметров и поиска в Google, что делают флажки certailn (насколько сложно сделать один диалог?), Я нашел ответ.
На самом деле вы можете сказать Visual Studio не беспокоиться о некоторых DLL или EXE-файлах и проходить по ним, не ломая и не запрашивая источник.
Вот как это сделать.
- Откройте диалог настроек в visual studio. (Инструменты> Параметры)
- Перейдите к разделу "Отладка"> "Символы"
Или введите "Символы" в правом верхнем поле "Быстрый запуск" в VS 2012+ и нажмите Enter.
Внизу справа выберите "Все модули, кроме исключенных"
Нажмите на ссылку и укажите DLL или EXE-файлы, которые вы хотите исключить.
- Добавьте модули, которые вам не нужны, не хотите отлаживать.
http://i40.tinypic.com/2ecolqb.png
В моем случае мне пришлось добавить
Ninject.dll
- Ninject Core DLL
Ninject.Extensions.Interception.dll
- Это модуль перехвата Ninject
Ninject.Extensions.Interception.DynamicProxy.dll
- Я использую реализацию Dynamic Proxy для модуля перехвата, а не реализацию LinFu. Я тоже не хочу отлаживать это.
По сути, этот диалог означает: "Мне нет дела до этих библиотек DLL. Просто игнорируй их, когда я отлаживаю ".
Похоже, вам нужно только имя EXE или DLL, а не весь путь. И это не похоже на регистр.
Эта опция доступна в VS 2010 и VS 2012. Если у вас более старая версия и вам нужна эта функция, вам может не повезти.
После добавления этого все команды "Step-Into" (F11) идут только в код, который я написал, и не запрашивают символы или просят меня найти исходные файлы для Ninject. В окне стека вызовов все кадры стека из этих сборок объединяются в одну строку с именем "[Внешний код]".
Удачного кодирования.
Я надеюсь, что это сделало вашу жизнь проще.