2011-08-14 15 views
3

私はContextBoundObjectから継承したクラスのインスタンスから作成された{System.Runtime.Remoting.Proxies .__ TransparentProxy}型の実行時オブジェクトを持っています。このクラスは他のオブジェクトにイベントを発生させ、このプロキシオブジェクトを元のオブジェクトに変換する必要があります。すべてのオブジェクトは、単一システム上のデフォルトのAppDomainにあります。元の型への透過プロキシ

元のオブジェクトに変換するにはどうすればよいですか?プロキシが同じメモリ上

答えて

2

を実行している場合は、MarshalServices.GetRealProxy()を呼び出すことによってtransarentプロキシのRealProxyインスタンスを取得することができcretaedが、デフォルトRealProxyのみ(この参照をさらす非パブリックメンバーを持っているため、サーバーのオブジェクト参照を取得することは、その後に困難であるのはなぜ保護されたメソッドGetUnwrappedServer()および内部プロパティUnwrappedServerObject)。 RealProxyが自分で実装されている場合、またはリフレクションによって実装されている場合(これを実行するのに十分な信頼性がある場合)は、どちらにでもアクセスできます。

0

コンテキストバインドオブジェクトへの実際の参照を取得すべきではありません。 Evanはリフレクション/内部APIを使用して参照を取得しますが、予期しない動作が発生します(ルールが破られたため)。 Googleを使用してコンテキストオブジェクトの詳細を表示できます。

あなたの実際のアーキテクチャ/デザインに問題があると思います。同時に「アジャイル」と「コンテクストバウンド」になるオブジェクトを持つことはできません。解決策は、ビッグオブジェクトを2つに分割することです(1つのコンテキスト境界ともう1つのアジャイルオブジェクト、そしてそれらの間に参照を保持する)。

したがって、MArshallByRefObjectから継承した「アジャイル」の参照を作成AppDomainに取得すると、プロキシではなく実際のオブジェクト参照が取得されます。 (これはMarshallByRefObjectの定義です)

関連する問題