問題タブ [dynamic-proxy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 実行時にメソッドの実装を置き換えるにはどうすればよいですか?
私は、独自のカスタム属性で装飾できるプロパティ ゲッターとメソッドを持ち、その属性の存在に基づいて、メソッド本体を別の実装に置き換えたいと考えています。また、その別の実装では、メソッドを装飾するカスタム属性に指定されたコンストラクター引数を知る必要があります。
これは明らかに、PostSharp や LinFu などの AOP で実行できますが、ビルド後の処理ステップを必要としない方法があるかどうか疑問に思っています。
entity-framework - EF4.0動的プロキシPOCOオブジェクトがターゲットタイプと一致しません
私はEF4.0とPOCOを使用しています。データベースにレコードを挿入しているときに、このエラーに遭遇しました。
オブジェクト「BI.Entities.QualityReason」のプロパティアクセサ「QualityReasonID」が次の例外をスローしました:「オブジェクトがターゲットタイプと一致しません」。
新しいレコードをデータベースに保存した後、GridViewへのデータバインドでエラーが発生します。何が起こっているのかを特定しましたが、なぜそれが起こっているのか、またはEF/POCOを誤って使用しているかどうかはわかりません。任意の洞察をいただければ幸いです。
IEnumerableのオブジェクトタイプが同じではないため、例外が発生しています。テーブルの元のエントリのタイプはSystem.Data.Entity.DynamicProxies.QualityReason_E483AD567288B459706092F1825F53B1F93C65C5329F8095DD1D848B5D039F04}ですが、新しいエントリはBI.Entities.QuailtyReasonです。
これが私が新しいオブジェクトを挿入する方法です。
フェッチコードを次の場所から変更することでエラーを解決しました。
に
したがって、エラーを回避するには、毎回明示的にPOCOクラスを選択する必要があります。これは私が何か間違っているように感じます。何かご意見は?
java - (インターフェースではなく)抽象クラスのプロキシーを作成するためのjava.lang.reflect.Proxyの代替手段
ドキュメントによると:
[
java.lang.reflect.
]Proxy
は、動的プロキシクラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシクラスのスーパークラスでもあります。
このnewProxyMethod
メソッド(動的プロキシの生成を担当)には、次のシグネチャがあります。
残念ながら、これにより、(特定のインターフェイスを実装するのではなく)特定の抽象クラスを拡張する動的プロキシを生成できなくなります。これは、「すべての動的プロキシのスーパークラス」であると考えると理にかなっており、それによって別のクラスがスーパークラスになるのを防ぎます。java.lang.reflect.Proxy
したがって、特定の抽象クラスから継承java.lang.reflect.Proxy
する動的プロキシを生成し、抽象メソッドへのすべての呼び出しを呼び出しハンドラーにリダイレクトできる代替手段はありますか?
たとえば、抽象クラスがあるとしますDog
。
次のことができるクラスはありますか?
c# - DynamicProxy を介して、型にプロパティを追加することは可能ですか?
Castle DynamicProxy を使用して、実行時に特定のタイプのプロキシを作成しています - いくつかの mixin を含みます。
プロキシに任意のプロパティを追加することも可能かどうかを把握しようとしています。
実行時に、次のような新しい型を作成します。
理論的には、これは可能であるように思われます.Castleでそれを行う方法がわからないだけかもしれません...何か考えはありますか? ありがとう!
c# - プロキシが仮想プロパティの属性を取得していませんか?
2.2を使用するDynamicProxy
と、この問題が発生していると思います。
「プロキシで使用できない仮想プロパティの継承可能な属性」
http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-109
仮想プロパティを持つ基本クラスがあります。プロパティはでマークされてい[XmlIgnore]
ます。派生クラスをシリアル化すると、プロパティはシリアル化されません。しかし、派生クラスのプロキシを作成すると、プロパティはシリアル化されます。この問題を示す簡単なコンソールアプリケーションを次に示します。
これはバグですか?または私は何か間違ったことをしていますか?簡単な回避策は、私のIsDirty
プロパティを仮想ではないようにすることです。これは、私が作業しているシナリオでは実際には許容できるかもしれませんが、仮想であることが望ましいです。
ありがとう。
Patrick Steele http://weblogs.asp.net/psteele
c# - DynamicProxyを元のタイプに「実際に」ダウンキャストする方法(WCFを介して送信するため)
OK、状況は、PatientDto
Castleによって生成されたクラスとDynamicProxyがあるということPatientDtoProxy
です。
このプロキシをSilverlightクライアントで使用していて、WCFサービス呼び出しを介してサーバーに送り返したいと考えています。
WCFサービスコントラクトはPatientDto
(プロキシではなく)を期待しており、他の何かを送信しようとすると、予想どおりに爆発します。
基本的に、動作させるためにそれをに「キャスト」する必要があるように感じPatientDto
ます...しかし実際には、参照をPatientDtoにキャストしても、何も変更されません-WCFはオブジェクトを認識しますとしてメモリにありPatientDtoProxy
、爆破します。
明らかに、新しいものにディープコピーを行うことPatientDto
はオプションです(そして機能します)が、不快なものです。考えていないテクニックはありますか?
java - 逆シリアル化時にシングルトン Spring Bean を再アタッチする方法
シングルトン スコープの依存関係を、逆シリアル化された後、プロトタイプの Spring Bean に再注入したいと考えています。
リポジトリ Bean に依存する Process Bean があるとします。リポジトリ Bean はシングルトンとしてスコープされますが、プロセス Bean はプロトタイプ スコープです。定期的にプロセスをシリアル化し、後で逆シリアル化します。
リポジトリをシリアライズおよびデシリアライズしたくありません。また、プロセス内の参照を保持するメンバー変数、ある種のプロキシへの参照、またはリポジトリとして宣言されたプレーンな古いメンバー変数以外のものに「一時的」を配置したくありません。
私が欲しいと思うのは、プロセスがその依存関係を、(一時的な参照を使用して) リポジトリを指すシリアライズ可能なプロキシで満たすことであり、デシリアライズ時にリポジトリを再び見つけることができるということです。それを行うためにSpringをどのようにカスタマイズできますか?
のように、プロキシを使用して依存関係の参照を保持できると思います。その正確なテクニックを使用できればいいのにと思います。しかし、Spring が生成するのを見たプロキシはシリアライズ可能ではなく、ドキュメントによると、それをシングルトン Bean で使用すると例外が発生します。
おそらく、カスタム スコープの Bean を要求されたときに常にプロキシを提供するカスタム スコープをシングルトン Bean で使用できます。それは良い考えですか?他のアイデア?
mfc - ActiveX をラップして呼び出しをインターセプトする (ActiveX プロキシ ラッパー)
システムに深く根付いた ActiveX コントロールがあり、それについて知りたい/修正したい!
このMFC dllを、メンバーなどをインターセプトする透過プロキシクラスでラップすることを考えています.
MFCでこれにどのようにアプローチできますか。
ありがとう!
java - Java 動的プロキシと通常のプロキシの有用性
動的プロキシが通常のプロキシよりも役立つシナリオについてアドバイスが必要です。
私は、動的プロキシを効果的に使用する方法を学ぶことに多大な努力を払ってきました。この質問では、AspectJ のようなフレームワークが基本的に動的プロキシで達成しようとするすべてのことを実行できること、または動的プロキシのいくつかの欠点に対処するために CGLIB を使用できることは脇に置いておいてください。
ユースケース
- デコレータ - たとえば、メソッド呼び出しのロギングを実行したり、複雑な操作の戻り値をキャッシュしたりします
- 契約を維持する - つまり、パラメーターが許容範囲内にあり、戻り値の型が許容値に準拠していることを確認します。
- アダプター - これがどのように役立つかを説明する巧妙な記事をどこかで見ました。ただし、このデザインパターンに出くわすことはめったにありません。
他は?
動的プロキシの利点
- デコレーター: すべてのメソッド呼び出しをログに記録します。
デコレータ パターンは、すべてのプロキシ メソッドに副作用を与えることができるため、間違いなく便利です (ただし、この動作はアスペクトを使用する本の例です)。
- コントラクト: 通常のプロキシとは対照的に、完全なインターフェイスを実装する必要はありません。例えば、
一方、コントラクトには、完全なインターフェイスを実装する必要がなくなるという利点しかありません。繰り返しますが、プロキシされたメソッドをリファクタリングすると、動的プロキシが暗黙のうちに無効になります。
結論
ここで私が目にするのは、実際の使用例と疑わしい使用例の 1 つです。あなたの意見は何ですか?
java - 動的プロキシとチェックされた例外
動的プロキシにチェック済み例外をスローさせるにはどうすればよいですか?
.などのチェックされた例外をスローすることがあるインターフェイスの透過ラッパーが必要IOException
です。サードパーティのAOPがなくても、または独自のプロキシを作成しなくても可能ですか?インターフェイスの20のメソッドすべてを手動で変更することもオプションではありません。