問題タブ [castle-dynamicproxy]
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# - パラメータを使用してメソッドをプロキシするときのCastle DynamicProxy v1例外?
Castle DynamicProxy v1.1.5.0 を使用してパラメーターを使用してメソッドをプロキシする際に問題が発生しています。- 「インデックスが配列の範囲外でした」という例外が発生します。
パラメータのないメソッドまたは DynamicProxy v2 のみを使用すると、すべて正常に動作します。
残念ながら、プロジェクトのリーダーに v2 への依存関係を追加するよう説得するのに苦労しています (NHibernate に付属しているため、既に v1 を使用しています)。
だから私の質問は次のようになります:これはv1で行うことができますか? 私はそれを間違って使用していますか?
これが核心です。
基本クラスへのコンパイル時の依存関係を持たずに継承をシミュレートするメカニズムを実装しました。理由は聞かないでください。理由は醜いです:(
これがどのように壊れるかを示す完全な例を次に示します。Castle.DynamicProxy.dll (v1) を参照しています。Castle.DynamicProxy[b]2[/b].dll (+ Castle.Core.dll) への参照を変更する場合は、コードの先頭にある #define のコメントを外します。
長いコードで申し訳ありませんが、重要な詳細を明らかにするのではないかと心配していました...
また: 免責事項: コード サンプルには厄介なバグがいくつかあります。(おそらく、私が見つけたよりも多くのこともあります:)
うわー!それは一口です。v1 を使用する場合に発生する例外は次のとおりです。
v2 で実行すると、正しい出力が得られます。
派生 - ふー!派生 - バズ!
...ヘルプ?
asp.net - Castle DynamicProxyで「無効な内部状態」リフレクション例外が発生するのはなぜですか?
数週間前に、DynamicProxyをASP.NETWebアプリに追加しました。コードはdevとQAで正常に実行されましたが、本番環境にプッシュすると、次の例外が発生しました(スタックトレースの最上位のみ)。
System.Reflection.Emit.TypeBuilder._InternalSetMethodIL(Int32 methodHandle、Boolean isInitLocals、Byte [] body、Byte [] LocalSig、Int32 sigLength、Int32 maxStackSize、Int32 numExceptions、__ExceptionInstance [] exceptions、Int32 [] tokenFixups、Int32 [] rモジュールモジュール)+0 System.Reflection.Emit.TypeBuilder.InternalSetMethodIL(Int32 methodHandle、Boolean isInitLocals、Byte [] body、Byte [] LocalSig、Int32 sigLength、Int32 maxStackSize、Int32 numExceptions、__ExceptionInstance [] exceptions、Int32 [] tokenFixups、 Int32 [] rvaFixups、モジュールモジュール)+56 System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()+1033 System.Reflection.Emit.TypeBuilder.CreateType()+99 Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(TypeBuilder type )+72Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter。BuildType()+96 Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String name、Type [] interfaces、INamingScopenamingScope)+854 Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type [] interfaces、ProxyGenerationOptions options)+834Castle。 DynamicProxy.DefaultProxyBuilder.CreateClassProxyType(Type classToProxy、Type [] additionalInterfacesToProxy、ProxyGenerationOptions options)+133 Castle.DynamicProxy.ProxyGenerator.CreateClassProxyType(Type classToProxy、Type [] additionalInterfacesToProxy、ProxyGenerationOptions options)+52 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy 、Type [] additionalInterfacesToProxy、ProxyGenerationOptionsオプション、Object []コンストラクター引数、IInterceptor []インターセプター)+308 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy、Type [] additionalInterfacesToProxy、ProxyGenerationOptionsオプション、IInterceptor []インターセプター)+48 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy、ProxyGenerationOptionsオプション、IInterceptor []インターセプター)+44
最初にコードをプッシュしたときは正常に機能し、IISリセットで修正されたため、スレッドに関連していると思いますが、スレッドセーフプロキシ生成のベストプラクティスに関してインターウェブ上で何も見つかりませんでした。提案?
更新:この問題についてさらに読んだ後、特にここで、1つの潜在的な問題に気付きました。つまり、作成したIProxyGenerationHookの実装用にEquals / GetHashCodeを上書きしなかったため、DynamicProxyがその型をキャッシュできなくなりました。DPに関連することは言うまでもなく、一般的に見た例外についてはほとんど何も見つからないので、問題の根本的な原因は、私の省略によって引き起こされた型のキャッシュの欠如であったと思いますが、 d確認が大好きです。
記録のために、私のオブジェクトの作成はかなりバニラです:
castle-windsor - ウィンザーコンテナのCastleDynamicProxy
少し問題があります。CastleWindsorIOCコンテナで作業しています。今、私がやりたかったのは、いくつかのAOPの原則をいじくり回すことであり、私が具体的にやりたいことは、メソッド名に基づいて、いくつかのロギングを実行することです。私はインターセプターを見てきましたが、現時点では、クラスとして実装されたIInterceptorインターフェースを使用して、アスペクトを使用してこのロギングを実行しています。問題は、特定のメソッドでロギングを実行したい場合、メソッド名などをチェックするために実装されたアスペクトにロジックを入れる必要があるため、面倒になります...
ダイナミックプロキシとIInterceptorSelectorインターフェイスおよびIProxyGenerationHookインターフェイスを使用してこれらすべてを実行できることを読みました。私はこれがネット上で行われたいくつかの例を見てきましたが、これがすべてウィンザーコンテナにどのように適合するかについてはかなり混乱しています。つまり、私のコードでは実際にはIWindsorContainerインターフェイスへの参照であるwindsorコンテナを使用して、すべてのオブジェクトを作成しています。私の設定はすべて、XMLではなくコードで行われます。
まず、私が現在行っている方法以外に、ウィンザーコンテナでメソッド固有のAOPを実行する方法を知っている人はいますか。
次に、ウィンザーコンテナでダイナミックプロキシを使用するにはどうすればよいですか?
以下に、プロキシを作成し、クラスをインターセプターに登録するコードを追加しました
テストクラスは以下のとおりです。
インターセプターに関しては、それらは非常に単純で、名前がCheckで始まる場合はメソッドを入力するだけです。
コンテナからTestClassを解決すると、エラーが発生します。
{"これはDynamicProxy2エラーです:ミックスインタイプTestClassProxyはDynamicProxyインフラストラクチャインターフェイスであるIProxyTargetAccessorを実装しているため、自分で実装しないでください。既存のプロキシをミックスしようとしていますか?"}
プロキシを間違った方法で使用していることは知っていますが、ウィンザーコンテナでプロキシを使用する方法の具体的な例を見たことがないので、ちょっと混乱します。
つまり、「チェック」という単語で始まるメソッドに対してインターセプターに最初に指示するLoggingProxyGenerationHookを使用する場合、これは正しい方法であるか、完全に間違ったパスにあります。非常に強力であるように思われるので、プロキシを使用しました。これらのプロキシを将来のプログラミング作業に使用する方法を理解したいと思います。
c# - Castle Windsor インターセプターからメソッドのカスタム属性にアクセスする
城のインターセプター内のメソッドに適用されたカスタム属性にアクセスしようとしています。
次のコードを使用します。
メソッドが呼び出されると、インターセプターは正常に起動しますが、このコードはカスタム属性を返しません。どうすればこれを達成できますか?
c# - インターセプト、解析、コンパイルする方法は?
これは私がしばらく解決するのに苦労してきた問題です。メソッド内のコードをコンパイル時にテンプレートから解析されたコードに置き換えるか(PostSharpが思い浮かびます)、動的プロキシを作成する方法(LinfuまたはCastle)が必要です。したがって、このようなソースコードが与えられます
これにコンパイルする必要があります
どのテクノロジーを使用するかは重要ではありません。PostSharpのImplementMethodAspectを試してみましたが、どこにも行きませんでした(経験不足のため)。Linfuフレームワークも調べました。誰かがこれを行うための他のアプローチや方法を提案できますか、私は本当に感謝します。私のプロジェクト全体はこれに依存しています。
仮定:
- コードはどのクラスにも表示できます。
- テンプレートコードには常に属性[テンプレート]の注釈が付けられます
- テンプレートメソッドは常に文字列を返します。
あるフォームから別のフォームへのコードの解析はすでに完了しています。今、私はそれを交換する方法が必要です。
「ビーファー」の例:
c# - Castle.DynamicProxy から DynamicProxy2 へのミックスインの移行を支援する
DynamicProxy を使用するコードを DynamicProxy2 に更新しようとしています。特に、DynamicProxy を使用して 2 つのクラスの mixin を提供しています。セットアップは次のようなものです。
次に、IHasShape と IHasColor の明らかな具体的な実装を想定して、次のような mixin を作成します。
プロキシ作成の結果を除いて、IColoredShape の具体的な実装はありません。StandardInterceptor は、IColoredShape オブジェクトの呼び出しを受け取り、必要に応じて「shape」または「color」オブジェクトに委任します。
しかし、私は新しい DynamicProxy2 をいじっていて、同等の実装を見つけることができません。
c# - autofacとdynamicproxy2を使用してメソッドを選択的にインターセプトする
私は現在、Autofac-1.4.5.676、autofac contrib、およびCastleDynamicProxy2を使用して少し実験を行っています。目標は、特定のインターフェイスの特定のメソッド への呼び出しをインターセプトできる粗粒度のプロファイラーを作成することです。
問題:選択部分を除いて、すべてが完全に機能しています。私は間違っている可能性がありますが、インターセプターをIProxyGenerationHook実装と組み合わせる必要があると思いますが、これを行う方法がわかりません。
私のコードは次のようになります。
インターセプトおよびプロファイリングされるインターフェース( Update()メソッドのプロファイリングのみに関心があることに注意してください)
これで、システムをコンテナーに登録するときに、次のことを行います。
コンテナーから引き出されたすべてのISomeSystemToMonitorインスタンスは、Updateメソッドだけでなく、すべてのメソッドをインターセプトするという事実を除いて、必要に応じてインターセプトおよびプロファイリングされます。
では、これを拡張してUpdate()以外のすべてのメソッドを除外するにはどうすればよいですか?私が言ったように、「ProfileInterceptorには、このIProxyHookGeneratorの実装を使用する」ことをコンテナーに通知する方法がわかりません。
すべての助けに感謝します、乾杯!また、現在autofac2.xにアップグレードできないことに注意してください。私は1で立ち往生しています。
castle - Castle Dynamic Proxy 値型をインターセプトすることは可能ですか?
問題があり、Castle 動的プロキシによって C# の値の型をインターセプトできるかどうか、答えやヒントが見つかりませんか? INotifyChanged インターフェイスで IDictionary をインターセプトしたい。プレゼンターがモデルを変更しているときにビューを更新するには、これが必要です。インターフェイスを作成するためだけにオブジェクトの小数点をボックス化するのは良い考えではありません...おそらく誰かが値の型を傍受する方法を知っていますか?
すべての回答に感謝
nhibernate - NHibernate + Remoting = ReflectionPermission 例外
完全信頼環境のマシン (実際には開発マシン) で NHibernate を Remoting と共に使用する際の問題に対処しています。
この問題は、サーバーから以前に取得したオブジェクトをパラメーターとして送信しようとすると発生します。このオブジェクトには、プロパティの 1 つに NHibernate Proxy が含まれています (レイジー プロキシ)。
私たちは開発マシンにいるので、Web アプリの信頼レベルに制限はありません (Full に設定されています)。プラスとして、NHibernate と Castle のアセンブリを CAS で完全に信頼するように構成しました ( IIS のリモート アプリには完全な信頼レベルがあるため、必要ありません)。
この例外を引き起こしている可能性があることを誰かが知っていますか? 以下スタックトレース。
前もって感謝します。