私は Castle のコミッターであり、Dynamic Proxy に貢献しているため、偏見があるかもしれませんが、一般的には Castle の Dynamic Proxy の方がはるかに優れたソリューションだと思います。ここで LinFu DynamicProxy v1.0 について話しているのは、それについてよく知っているからです。LinFu.Proxy 2 は Mono.Cecil に基づいており、ゼロから書き直されています。
- Castle はより幅広いシナリオをカバーします。
- Castle のユーザー ベースは (はるかに) 大きく、多くの OSS および商用アプリケーションで実績があります。
- キャッスルは実際に優れたパフォーマンスを発揮します (リンク)
- Castle には、よりクリーンで使いやすい API があります。たとえば、Castle DynamicProxy へのターゲット メソッドの呼び出しは次のようになります。
invocation.Proceed();
LinFu の場合、次のようになります (メモリから書いているため、実際のメソッド/プロパティ名は異なる場合があります)
//invocation.TargetMethod is MethodInfo, so you're using reflection
invocation.TargetMethod.Invoke(invocation.Target,invocation.Parameters);
- Castle にはアクティブなユーザー グループがあり、質問に対する回答をすぐに得ることができます。
他の回答で言及されているパフォーマンスの問題は DynamicProxy の問題ではありませんが、Microsoft の BCL の実装のバグの結果です (Mono ではそのような問題はありません)。これは、単一の ModuleScope に多くの (200 以上の) プロキシ タイプがある場合にのみ現れます。
解決策は簡単です - それほど多くのプロキシ タイプを生成しないか (通常は必要ありません)、多くの ModuleScopes/ProxyGenerators を使用します (たとえば、Rhino.Mocks はこのアプローチを使用します)。
個人的には Mono で開発していないので直接の経験はありませんが、Mono で Castle DP を使用しているライブラリがあり、何のコンプライアも得られなかったので、問題なく動作すると思います。
数か月前の私のベンチマーク以来、Castle DP の新しいリリースはありません (新しいバージョンは年末に予定されています)。LiFu には 2.0 バージョンがありますが、トランクのみなのかリリース済みなのかはわかりません。Spring や Unity についてはわかりません。