4

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つあると思います。

  1. Ninject Interception がインターフェイス メソッドへのバインドを許可しない理由はありますか?
  2. Ninject を動的な「ラッパー」クラスにバインドして、すべてのインターフェイス メソッドで特定の傍受アクションを実行し、呼び出しを実際の実装に渡す簡単な方法はありますか?
4

1 に答える 1

5

私はこれについていくつかのスパイクを行いましたが、その動作を傍受拡張機能に組み込むことが可能であるようです。しかし、2.2 のリリースは非常に近い将来に予定されているため、少し我慢する必要があります。私は間違いなくこの変更が気に入っているので、2.4 に追加する予定でした。また、スパイクは生産的ではありません。ただし、現在の単体テストはすべて実行されています。しかし、この機能に追加する必要がある新しい機能がたくさんあります。必要に応じてパッチをお送りできますが、現時点でバグがないことをサポートしたり保証したりすることはできません。

于 2011-02-10T19:01:14.660 に答える