Ninject Interception拡張機能を使用しています。 Ian Davis's blog postは、インターセプトが常にインターフェイスではなく実際のサービスタイプに基づいていることを示します。 Foo.DoSomething
がvirtual
ある場合 Ninject Interception Extensionのインターセプトインターフェイスメソッド
Kernel.InterceptBefore<IFoo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
そしてもちろんの
は、次のコード片はのみ動作します:Kernel.InterceptBefore<Foo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
これはのように思えるIFoo
はインタフェースであるため、例えば、次のコードでは効果がありませんアスペクト指向のプログラミングでは、かなり目立たない穴です。私はインターフェイスにプログラミングすることについてかなり慎重だったので、さまざまなサービスを模擬するために模擬フレームワークを使うことができましたが、実際のメソッド実装の大半は仮想ではありません。模倣しているフレームワークが私が求めている方法でIFoo
を生成できるなら、Ninjectができるはずです。
だから私は、私の質問は二つあると思う?
- はNinjectインターセプトがはあなたがメソッドをインターフェイスにバインドすることはできません何らかの理由がありますか
- Ninjectバインドをダイナミックな「ラッパー」クラスにバインドさせて、すべてのインターフェイスメソッドで特定のインターセプトアクションを実行させ、呼び出しを実際の実装に渡せるようにする簡単な方法はありますか?
ありがとう、レモ。私はこれについて非常に患者になることができます。私たちのプロジェクトで重要なことは、この機能に依存しません。私はNinjectでやってきた素晴らしい仕事と、ユーザーコミュニティに提供する迅速で一貫した反応に感謝します。あなたがこれをサポートするために何かできることがあれば教えてください。 – StriplingWarrior
これはまだ実装されていますか? – mac10688