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);
    }
}

次のように、メイン メソッドで Ninject カーネルをセットアップしています。

kernel = new StandardKernel();

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

問題は、へのメソッド呼び出しをデバッグするときmyClass(私はステートメントにブレークポイントを置いてmyClass.methodName()F11 を押しています)、インターセプターへの呼び出しが表示される前に、渡すスタックフレームがたくさんあることです。メソッド呼び出し。

Ninject が動的プロキシなどを作成することは認識しています。すべてのインターセプターから実際のメソッドまで、コードの流れを見たい場合。(どのインターセプターがメソッド呼び出しをブロックしているかを確認するためのデバッグを想像してください)

Ninject スタック フレームで壊れないように Visual Studio に指示する方法はありますか? (とにかくNinjectソースを持っていません)

更新 基本的に、私がやりたいことは、ソースを持っていないコードで壊れないようにVSに伝えることです...

4

1 に答える 1

2

オプション ダイアログを 4 時間掘り下げ、Google で特定のチェック ボックスの機能を検索した後 (1 つのダイアログをどれだけ複雑にできるか)、答えを見つけました。

実際には、特定の DLL や EXE を気にせずに Visual Studio に伝えることができ、ブレークしてソースを要求することなく、それらを「ステップスルー」することができます。

方法は次のとおりです。

  1. Visual Studio でオプション ダイアログを開きます。(ツール > オプション)
  2. [デバッグ] > [シンボル] セクションに移動します

または、VS 2012+ の右上の [クイック起動] ボックスに「シンボル」と入力して Enter キーを押します。

  1. 右下で、「除外されていない限りすべてのモジュール」を選択します

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

  2. リンクをクリックして、除外する DLL または EXE を指定します。

  3. 気にしない、デバッグしたくないモジュールを追加します。

スクリーンキャップ

私の場合、追加する必要がありました

  • Ninject.dll
    • Ninject コア DLL
  • Ninject.Extensions.Interception.dll
    • これは Ninject 傍受モジュールです
  • Ninject.Extensions.Interception.DynamicProxy.dll
    • LinFu 実装の代わりに、インターセプト モジュールに Dynamic Proxy 実装を使用します。これもデバッグしたくありません。

基本的に、このダイアログは、「これらの DLL はどうでもいい」という意味です。デバッグ中は無視してください。

パス全体ではなく、EXE または DLL 名だけが必要なようです。また、大文字と小文字は区別されないようです。

このオプションは VS 2010 および VS 2012 にあります。古いバージョンでこの機能が必要な場合は、うまくいかない可能性があります。

これを追加した後、すべての 'ステップ イン' (F11) コマンドは、私が書いたコードにのみ移動し、シンボルを要求したり、Ninject のソース ファイルを見つけるように要求したりしません。コール スタック ウィンドウでは、これらのアセンブリのすべてのスタック フレームが「[外部コード]」という名前の 1 行に結合されます。

ハッピーコーディング。

これがあなたの人生を楽にしてくれることを願っています。

于 2012-08-23T08:51:57.347 に答える