問題タブ [unity-interception]
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# - Unity インターセプトからベース メソッドを呼び出す
VirtualMethodInterceptor を使用して、Unity Interception 経由でアプリケーションに Transient Fault Handling Application Block を統合しようとしています。
インターセプトされたメソッドのアクション、関数、またはタスクを作成する呼び出しハンドラーを作成し、それを一時的な障害ハンドラーに渡しましたが、スタックオーバーフロー例外が発生しました。障害ハンドラーがメソッドを呼び出し、ユニティがインターセプトして障害ハンドラーに渡すため、これは理にかなっています。
私が必要としているのは、Fault Handler によってコールバックされたとき、または基本メソッドを直接呼び出したときにインターセプトをスキップできるようにすることです。最終的にクラスのメソッドを呼び出すため、ユニティがどのようにこれを行うことができるか。
私の傍受コード
私の属性
c# - Unity インターセプトが期待どおりに機能しない
Unity を aop フレームワークとして使用していますが、期待どおりに動作しません。以下のコードを確認してください。
container.Resolve() と ((IAnimal)person) が実行されると、動作も実行され、出力されます
メソッド System.Type GetType() begin の呼び出し
メソッド System.Type GetType() end の呼び出し
メソッドを明示的に呼び出したときにのみログを実行したい。それを防ぐ方法は?
c# - Unity DI/IoC でインターフェイス タイプの IEnumerable リストをインターセプトする
助けてくれるすべての人へ、
私は Unity コンテナーを初めて使用し、傍受を使用して特定のインターフェイスを含むコレクションをフィルター処理する方法に着手しています。インターセプトの適用は、AutoFac と Castle の経験がある私にとっては初めてのことです。ただし、実行できることはわかっていますが、インターセプターが発砲しない理由を理解するのに苦労しています。
基本的に、目標は、ログインしているユーザーのセキュリティ レベルに基づいてオブジェクトのコレクションをフィルター処理することです。このインターフェイスはISecableという名前が付けられており、その実装者はMinSecurityLevelのプロパティを持っている必要があります。残念ながら、コード ベースの大部分はインターフェイスに対してプログラミングされていないため、このインターフェイスは新しいものです。そのため、このインターフェースの実装者を使用するコレクションがいくつかあります。
Orders と Customers がISecableを実装する場所。
そのため、 ISecurableを実装するオブジェクトを含む各コレクションを見つけて、ログインしているユーザーのセキュリティ レベルに基づいてそれらのコレクションをフィルター処理するのではなく (これは維持するのが怪物になり、ユーザーのログインしているセキュリティ レベルを取得するのが厄介になります)。ISecableのオブジェクトを含む任意のコレクションをインターセプトすることは、コードを 1 つの中央の場所にタブで留めながら、この要件を満たすシンプルでエレガントな方法であると考えました。
そうすることで、インターセプトを開始するためのベースラインを得るために、インターネットの記事とサンプル コードを精査しました。残念ながら、実りあると証明されたものは何もありません。
私はここのポスターと同じ船に乗っているようです: Unity Interception - Custom Interception Behavior
残念ながら、彼/彼女が CallHandler および/または InterceptionBehavior 実装者を接続してコレクションのフィルタリングを開始する方法を知りません (さらに、コードベースはインターフェイス、つまり IList に対してプログラミングされており、私のコードベースは具体的な型の配列に依存しています)およびリスト)。
これは、私が試したコードのバージョンです (Handler または InterceptionBehavior クラスのプロパティまたはメソッドを起動するロックはありません)。
上記のコードを SecurityHandler を使用して、または使用せずに試してみましたが、同じ結果が得られました。インターセプトは発生しません。
すべての助けに感謝します!
これまでに使用したリファレンスは次のとおりです。
https://msdn.microsoft.com/en-us/library/ff660851(v=pandp.20).aspx#interception_behavior_custom
PS 評判が悪いため、参照したリンクを 2 つ以上投稿できませんでした。ごめん :(
編集
コンテナーから型を解決すると、インターセプターを起動できます。
テストとして、これは機能しました:
c# - カスタム属性を使用した .NET Unity インターセプト
ここでの回答で説明されている動作を取得したいと思いますが、コードを使用して構成を使用します。コード サンプルは、単一性に関連するものなしで作成され、構成を通じて動作を追加するカスタム属性を示しています。
カスタム属性は、同じソリューションで参照される別のアセンブリにあります。
問題は、構成中に例外がスローされることです。
InvalidOperationException: 型 Microsoft.Practices.Unity.InterceptionExtension.CustomAttributeMatchingRule には、パラメーター (LogAttribute、ブール値) を受け取るコンストラクターがありません。
スローする行を次のように更新します。
例外がスローされないようにしますが、LoggingHandler は [Log] 属性を持つメソッドからの呼び出しを受け取りません。
注: [Log] でマークされたメソッドは、.Resolve() を使用してインスタンス化されたクラス内の別のアセンブリ内のパブリック メソッドです。