1

そのため、ナンシーのウィンザーブートストラップでこの問題に遭遇しました。私はうまくいかないことを再現できる小さなテスト プロジェクトをまとめることができました。プロジェクトはここにあります

問題が発生しているように見えるのは次のとおりです。DynamicProxy は、別のスレッドで呼び出されたメソッドではvoid Handle(Action<string> oncomplete)なく、メソッドの呼び出しのみをキャッチするようです。別のスレッドに送信された後、 がプロキシされなくなったかのように。スクラッチ:プロキシされていないのは、同じクラスの別のメソッドへの呼び出しだけです。string Handle(string input)Engine

これは、プログラムの出力が

Handled Handle with return type System.Void
test

ではない

Handled Handle with return type System.Void
Handled Handle with return type System.String
test

これは動的プロキシの予想される動作ですか? 別のスレッドのそのプロキシは、もはやプロキシされていませんか? それともコードに何か問題がありますか?

編集: 動的プロキシを RTFM しただけで、Works As Intendedのようです。正しい種類のプロキシを使用するように IEngine インスタンスを構成するにはどうすればよいですか?

4

1 に答える 1

2

変更してみてください:

Component.For<MyEngine>().Forward<IEngine>().Interceptors<ScopeInterceptor>());

の中へ

Component.For<MyEngine>().Forward<IEngine>().Forward<MyEngine>().Interceptors<ScopeInterceptor>());

実際に試す時間はありませんが、これによりウィンザーは強制的にクラス プロキシを作成し、問題は解決するはずです。

よろしく、マルウェイン。

- 編集 -

現在のリンクについては、次を置き換えてみてください:

Component.For<IEngine>().ImplementedBy<Engine>()

と:

Component.For<IEngine, Engine>().ImplementedBy<Engine>()
于 2013-06-13T07:21:09.440 に答える