2009-07-06 5 views
3

JREまたはcglibプロキシライブラリを使用するJavaと同じスタイルで、POCO用のランタイムプロキシを作成したいと考えています。ランタイムプロキシPOCOはどうですか?

私はCastle DynamicProxyを見たことがありますが、法案に適合しているようですが、ドキュメントはあまり良くありません。私はまた、この種のものが.NET Framework自体にないことに驚いています。城DynamicProxyのために何か良いリソースの

  • 知っている:

    は誰もしていますか?

  • 代替アプローチについて知っていますか?

ありがとう!

答えて

2

これは答えにはあまり意味がないかもしれませんが、.NETで動的プロキシが普及していない理由の1つは、最も一般的な.NET言語(C#、VB.NET)がJava非常に重要な側面の1つである:

Javaでは、明示的にシールされていない限り、すべてのメソッドは仮想です。

C#(およびVB.NET IIRC)では、明示的に仮想宣言されていない限り、すべてのメソッドとプロパティが封印されます。

これは、ダイナミックプロキシの潜在的な値が、Javaの場合よりも.NETの方がはるかに低いことを意味します。あなたは明示的にあなたの.NETオブジェクトをプロキシブルに設計しなければなりません。ほとんどの人はそうしません。つまり、.NETオブジェクトをプロキシブルにする意識的な決定が必要です。

私はキャッスル以外のダイナミックプロキシを考えることはできませんが、実際にはDIコンテナ以外の.NETダイナミックプロキシを見るのは稀です。

「デフォルトで封印された」動作は、.NET の言語の機能であることに注意してください.Javaと同じ「デフォルトで仮想」動作を持つ.NETベースの言語を設計することは非常に考えられます。私は何も知らないが、そのような言語が存在しなければ私は驚くだろう。結局のところ、それはすべてコンパイラにあります。

1

"この種のことは.Net Framework自体にはないことにも驚いています。"

あります。完全ではありませんが、エレガントまたはパフォーマンス。 createは、RealProxyを継承し、おそらくプロキシされるオブジェクトを取り込む汎用プロキシを使用できます。プロキシを取得するには、realproxyからtransparentproxyを取得し、それをあなたのwrapee(それは単語ですか?)型にキャストします。今あなたはプロキシを持っています。プロキシのすべてのメソッドは、RealProxyのオーバーライドされたInvoke(IMessage msg)で処理できます。あなたの本物の物(看護師)にそのまま渡すか、その間に何でもしてください。

キャベツ:あなたのオブジェクトは、MarshalByRefから継承しなければなりません。それはかなり遅いです。私は頻繁に使用される機能には使用しません。これは、ここでプレイしているすべてのリモートインフラストラクチャです。ほとんどの場合、ILgenが良い方法ですが、上記の方法を使用しなければならない場合があります。

関連する問題