3

AutofacでCastleDynamicProxyを使用しています。プロキシを作成したオブジェクトがあり、プロキシに作用する2つのインターセプターがあります。1つは例外をログに記録するためのもので、もう1つはメソッドの戻り値を変更するためのものです。登録コードは次のようになります。

var builder = new ContainerBuilder();

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

この順序で引数を指定することにより、必要な結果が得られることがわかります。つまり、例外がログに記録され、結果が処理されます。引数の順序を逆にすると、ロギングは発生しません。

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

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

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

musicologyman

4

1 に答える 1

3

はい、インターセプターはデフォルトで、インターセプトされたすべてのメソッドに対して指定された順序で実行されます。

正しく述べたように、必要に応じてメソッドごとにオーバーライドできますIInterceptorSelector

于 2012-07-01T04:36:53.550 に答える