問題タブ [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 のパフォーマンスを改善していますか?
現在、オブジェクトの装飾された属性に自動監査を追加する AOP システムを実装しようとしています (の拡張バージョンによって行われますINotifyPropertyChanged
)。自動監査には、古い値と新しい値の propertyName が含まれます。
ツールの使用方法に関する優れたチュートリアル (つまり、これ:: http://kozmic.pl/archive/2009/04/27/castle-dynamic-proxy-tutorial.aspx ) があるため、現在、Castle の DynamicProxy2を使用しています。 . 型に合わせて装飾された各プロパティのデリゲートを生成します。式ツリーは次のようなものを生成します:: (コードはタイプ セーフなリフレクション ライブラリと多くの静的変数に依存しているため、式ツリー コードを貼り付けるよりも簡単だと思います)
次に、(IInterceptor を実装するクラスを選択するカスタム セレクターがありDelegatedInterceptor
、その Intercept メソッドはデリゲートを呼び出すだけです。また、委任する予定のプロパティのみを選択するカスタム フックもあります (したがって、 get メソッドをプロキシします)。
残念ながら、これらすべての予防策を講じても、すべてのプロパティ セットでパフォーマンスに大きな影響が見られます (そのロジックを手動で実行するには約 0.4 ティック、動的プロキシを使用すると約 2.2 ティック、必要な場合は 2.8 ティックが必要です)。のロジックを mixinINotifyAuditedChange
すると、イベントが発生します)。これはそれほど悪くはありませんが、私の要件の一部として、非常に大量のオブジェクトが変更されていることを確認しています。
残念ながら、typebuilder を使用する私の計画は失敗しました (Reflection.Emit でコードを書くのは難しすぎて、明らかに CompileToMethod をインスタンス メソッドに使用することはできません)。DynamicProxy2 のパフォーマンスを改善するために欠けているトリックはありますか?
nhibernate - Castle DynamicProxy が生成したクラス名
Castle DynamicProxy を介して生成された型の名前を制御できるかどうかを知っている人はいますか? Castle によって生成されたアセンブリを永続化する機能を利用して、特定の機能を備えたクラスをプロジェクトに追加したいと考えていましたが、これらの生成されたプロキシ タイプの名前を制御できるようにしたいと考えています。どんな助けでも大歓迎です。
実際には、これらのクラスのインスタンスと、プロキシのソースである元のクラスのインスタンスを NHibernate で永続化する予定です。したがって、これらの名前は、アセンブリの複数の世代にわたって一貫している必要があります。
castle-dynamicproxy - DynamicProxy を使用して、複数のクラスを持つ複数のインターフェイスをどのようにマージできますか?
以下に示すように、ICatBase と ICatExtension から派生したインターフェイス ICat があるとします。CatBase と CatExtension の両方の異なるインターフェイスに対して、実装が利用可能です。Castle の DynamicProxy を使用して、これらを ICat のインスタンスにマージするにはどうすればよいですか?
ICatExtension が CatExtension によって実装され、ICatBase がインターセプターによって「実装」されているプロキシを作成することは可能ですか? これはどのように達成できますか?
編集
ミックスインを使用してこれを機能させようとしましたが、以下のコードでは NotImplementedException が発生します。
これは DynamicProxy2 エラーです: ターゲットを持たないメソッド 'Void set_Name(System.String)' に指定されたインターセプターはありません。ターゲットなしでメソッドを呼び出す場合、「続行」する実装はなく、実装を模倣するのはインターセプターの責任です (戻り値の設定、引数の出力など)。
呼び出しをインターセプトして正しいインターフェイスにディスパッチするカスタム インターセプターを作成することもできますが、もっと簡単で優れた方法が必要だと思います。私は正しいですか?
編集#2
ありがとう、クシシュトフ!以下の行を使用することが解決策でした。
編集#3
最後のステップとして、Windsor コンテナーを構成して、この例からプロキシーを作成しました。これを行うことができた唯一の方法は、「Cat」という名前を指定し、名前を指定してICat
後でインターフェースにキャストすることで System.Object のインスタンスを解決することでした。
特定の名前を参照せずに、コンテナーに ICat インスタンスを要求できる、よりエレガントな方法はありますか?
.net - メソッドがCastleDynamicProxyによって自動実装されているかどうかを確認する最も簡単な方法
プロキシのメソッドがDynamicProxyによって自動実装されているかどうかを確認する最も簡単な方法を探しています。つまり、コンポーネントを登録するときに、いくつかのAdditionalInterfacesを追加し、インターセプターで、そのインターフェイスがプロキシに自動実装されている場合にのみメソッドをインターセプトしたいとします。.Proceed()を呼び出すとNotImplementedExceptionがスローされます。 。ComponentModelを使用してこれを確認するための大まかな方法をいくつか考えることができますが、簡単で簡単なものがあるのではないかと期待していました。
ありがとう!
c# - キャッスルウィンザーインターセプターセレクターとフック
Castle Windsorでいくつかのプロジェクトを行っていますが、構成ファイルのインターセプターフックに問題がありますIProxyGenerationHook
。
名前が「保存」で始まるメソッドをインターセプトし、構成ファイルに動的にフックするだけです。また、設定ファイルには次のものがあります。
設定ファイルで何か間違ったことをしていると思います。何か案は?
.net - Castle Windsor ProxyGenerationException
同じジェネリック インターフェイスの 2 つの異なるジェネリック フォームを実装するインターフェイス (ターゲットなし) をプロキシしようとすると、次のエラーが発生します。
ので、私は持っています:
次のエラーが表示されます。
助言がありますか?回避策はありますか?
ありがとう。
structuremap - 追加機能のメソッド呼び出しをインターセプトする最も簡単な方法は何ですか?
のリストを返すリポジトリがあるとしますPost
。リポジトリ インターフェイスには、GetAll()
それが示唆することを行うメソッドがあります。
ドメインロジックをリポジトリに入れるべきではないという理論に沿ってGetAll()
、次のロジックをGetAll()
結果に追加できるように、具体的なメソッドへの呼び出しをインターセプトしたいと考えています。
これを傍受したい理由は、(1)クライアントに拡張メソッド(OrderByDescending
またはその役に立たないラッパー)を呼び出すことを覚えてもらいたくない、毎回呼び出す必要がある、および(2)そうしないためですすべての具体的な実装で、GetAll()
結果を順序付けすることを忘れないようにしたい - このロジックを任意のリポジトリの外部の単一の場所に配置したい。
これを行う最も簡単な方法は何ですか?
私はすでにStructureMapを使用しているので、これで傍受できれば、低コストのオプションになる可能性があります。しかし、SM がメソッド呼び出しをインターセプトするとは思いません。オブジェクト インスタンスの作成だけですか?
プロキシまたは mixinパターンに移動する必要がありますか? Castle Dynamic Proxyにオールインする必要がありますか? または、考慮すべき別の方法、またはおそらく組み合わせがありますか?
上記の特定の例に対する具体的な提案に本当に興味があります。私はAOPの初心者なので、優しくしてください。
aop - Autofac と DynamicProxy2 を使用した AOP
このようにクラスを傍受するために、DynamicProxy2でAutofacを使用しています
これにより、特定のインターフェイスのすべてのメソッドがインターセプトされます。
インターフェイスの特定のメソッドだけをインターセプトする方法はありますか?
c# - Castle Windsor Interceptor w/o Interface?
Using Castle Windsor for DI, I've two classes that implement the same interface; and besides that have some methods and properties of their own. I'm using Castle DynamicProxy and created an Interceptor that'll do some logging w/Log4Net via the Castle.Facilities.LoggingLoggingFacility.
The log file neatly logs for each method that's implemented via the interface, when that method gets called. In the sample code below, method Foo() gets logged, when called, but method LogMeToo() doesn't since it isn't part of the implementation of IFoo.
I want that also the other methods that don't implement the interface get logged when called. Is this possible, and if so: how?
PF C# 4.0
logging - DynamicProxyを使用してStructureMapのロギングインターセプターを作成しようとしています
UI(DNNモジュール)から使用するさまざまなサービスへの通話をログに記録して、ユーザーがサイトをどのように操作しているかをプロファイルしようとしています。StructureMap2.5.3.0とLog4Netを使用しています
個々のクラス/インスタンスのペアでうまく機能するようになりましたが、次のように構成する必要があります。
二度持っていることIRegService
は少し厄介に感じましたが、私はそれと一緒に暮らすことができます。
ロギングは次のように実装されます。
これは機能しますが、いくつかの問題があります。
- 各サービス<->インターフェイスペアを手動で構成する必要があります
- UIからサービスが呼び出されたときにのみログを接続したい
StructureMapのTypeInterceptorを実装して、これを回避しようとしました。
しかし、への呼び出しがProcess
ビルドコンテキストによって定義されたインターフェイスを実装しないクラスを私に与えるという問題が発生しています。InterfaceLogger
これにより、の実装を変更する必要があります
のブレークポイントにreturn interfaceProxy;
到達することcontext.BuildStack.Current.RequestedType
はありません。これは、正しいインターフェイスを返さないことを示します。奇妙なことに、私のクラスはすべて正しく注入されているようです。
また、これが機能していても、UIレイヤーからの呼び出しのみをインターセプトしたいという問題があります。
私は私の最初の2つの問題の方法を探しています、そしてまた私が間違っていることTypeInterceptor