Ninject Interception 拡張機能をいじっています。これに関するIan Davis のブログ投稿は、傍受は常にインターフェイスではなく、実際のサービスの種類に基づいていることを示しています。たとえば、次のコードはIFoo
インターフェイスであるため効果がありません。
Kernel.InterceptBefore<IFoo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
そしてもちろん、次のコードは次の場合にのみ機能しFoo.DoSomething
ますvirtual
:
Kernel.InterceptBefore<Foo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
アスペクト指向プログラミングに関して言えば、これはかなり明白な穴のように思えます。さまざまなサービスをモックするためにモック フレームワークを使用できるように、インターフェイスのプログラミングにはかなりの注意を払ってきましたが、実際のメソッド実装の大部分は仮想ではありません。モッキング フレームワークが、IFoo
私が求めていることを実行する with a メソッドを生成できる場合、Ninject もできるはずです。
したがって、私の質問は2つあると思います。
- Ninject Interception がインターフェイス メソッドへのバインドを許可しない理由はありますか?
- Ninject を動的な「ラッパー」クラスにバインドして、すべてのインターフェイス メソッドで特定の傍受アクションを実行し、呼び出しを実際の実装に渡す簡単な方法はありますか?