2

caliburn.micro フレームワークを使用して WPF デスクトップ アプリケーションを開発しています。メソッド呼び出しをインターセプトできるように ninject インターセプターを構成したいと考えています。コードのあちこちに多くの try-catch ブロックがないように、集中化された場所で例外を処理するためにこれを行いたいと思います。

ninject ですべてを配線するたびに、システムが例外をスローするため、これを達成できませんでした。

だからここにいくつかのコードがあります:

AppBootstrapper の構成メソッドは次のようになります。

    protected override void Configure()
    {
        _kernel = new StandardKernel(new NinjectServiceModule());
        _kernel.Bind<IWindowManager>().To<WindowManager>().InSingletonScope();
        _kernel.Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope();
        _kernel.Bind<ISomeViewModel>().To<SomeViewModel>().Intercept().With<SomeInterceptor>() //this is where the exception is thrown;
        _kernel.Bind<IShell>().To<ShellViewModel>();
    }

今私のインターセプターのインターセプトメソッド:

    public void Intercept(IInvocation invocation)
    {
        if (invocation.Request.Method.Name == "TheMethodIWantIntercepted")
        {
            try
            {
                invocation.Proceed();
            }
            catch (Exception)
            {

                Console.WriteLine("I Handled exception");
            }
        }
        else
        {
            invocation.Proceed();
        }

    }

ビュー モデルのメソッドは次のようになります。

    public virtual void TheMethodIWantIntercepted()
    {
        //Some logic here
    }

これが、インターセプターが機能するはずの方法です。しかし、プログラムを実行するたびに機能せず、ninject が SomeViewModel のインスタンスを ISomeViewModel に挿入しようとすると、プログラムの実行が失敗し、これがスローされる例外 (およびスタック トレース) です: http://pastebin .com/qerZAjVr

これで私を助けてくれることを願っています、事前に感謝します。

4

1 に答える 1

1

好みのプロキシ ライブラリに応じて、DynamicProxy(2)Module または LinFuModule のいずれかをロードする必要があります。

また、Ninject 2.2 は、以下を必要とする SomeViewModel のクラス プロキシを作成することに注意してください。

  1. パラメータなしのコンストラクタ
  2. 仮想メソッド

インターフェイス プロキシにはこの制限はありませんが、これには Ninject 3.0.0 が必要です

于 2012-02-21T22:18:04.273 に答える