2012-03-14 14 views
2

私はキャットDynamicProxyをAutofacで使用しています。私はプロキシを作成したオブジェクトを持っていて、プロキシで動作する2つのインターセプタを持っています.1つは例外をログに記録し、もう1つはメソッドの戻り値を変更します。登録コードは次のようになります。Autofac + Castle DynamicProxy:インターセプタの順

var builder = new ContainerBuilder(); 

builder.Register(c => c.Resolve<ProxyGenerator>() 
    .CreateClassProxy<Foo>(
     c.Resolve<ResultProcessorInterceptor>(), 
     c.Resolve<ExceptionLoggingInterceptor>())) 
    .As<Foo>(); 

この順序で引数を供給することにより、私は、私が欲しいという結果を得る、すなわち、例外がログに記録され、その結果が処理されていることを発見しています。引数の順序を逆にすると、ロギングは発生しません。

私の質問は、このように登録されています。インターセプタは毎回同じ順序で実行されることが保証されていますか?それとも、毎回何をしようとしているのかを確認する良い方法がありますか?

FWIWでは、IInterceptorSelectorインターフェイスを調べました。おそらく、私は何かを見逃している - それはそうではない - しかし、それはこの場合には関係がないように見えた。しかし、私が間違っていれば、私は訂正されてうれしいです。

必要に応じて、より長いコードサンプルを提供できます。

musicologyman

答えて

2

はい、インターセプタは、すべての傍受法のための提供順に実行デフォルトになります。

正しく指定したとおり、必要に応じてIInterceptorSelectorを使用してメソッドごとにオーバーライドできます。