問題タブ [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.

0 投票する
1 に答える
5475 参照

unity-container - インターフェース インターセプターを使用した慣例による Unity 登録により、「[type] はインターセプトできません」という例外が発生する

WithMappings.FromMatchingInterface特定のインターフェースを実装するすべてのクラスを規約で Unity に登録したい。さらに、登録されているすべてのオブジェクトを、インターフェイス インターセプト動作を使用してインターセプトしたいと考えています。問題は、Unity が具象クラス間のマッピングも登録し、それらのクラスが解決されると、次のメッセージとともに例外がスローされることです。

「[type] は傍受できません」

具象クラス タイプを使用してオブジェクトを解決することはベスト プラクティスではないことは理解していますが、慣例に従って登録するときに、Unity がインターフェース -> 具象クラスと具象クラス -> 具象クラスの両方のマッピングを自動的に追加するのはなぜでしょうか? これは、インターフェイス インターセプターを追加して具象型を使用して解決すると、機能しないことを意味します。

これに対する私の望ましい結果は、Unity が、慣例に従って登録し、インターフェイス インターセプターを与えるときに、具象型 -> 具象型マッピングを追加しなかったことです。そうすれば、必要に応じて具象型を使用してクラスを解決できます。インターセプトを取得しません。

VirtualMethodInterceptorインターセプトが機能するためにクラスに変更を加えたくないので、 を使用したくありません。これには からの継承が含まれMarshalByRefます。また、すべてのオブジェクトを個別に登録することも避けたいです。

したがって、私の質問は、規則に従って登録するときにインターフェイス マッピングだけを登録するにはどうすればよいですか?

更新:クラスを個別に登録すると同じ問題が発生するため、オブジェクトがインターフェイスインターセプターに登録されると、具象型を使用して解決できないと想定されます。

新しい登録コード:

更新 2すべてのインターフェイスにデフォルトのインターセプターを追加することは機能しているようですが、このソリューションはややハックです。このソリューションでは、規約による標準登録の直前に少しコードを追加InterfaceInterceptorし、規約ベースの登録で を削除する必要があります。

事前登録コード

ジレンマを説明するいくつかのコード:

0 投票する
1 に答える
1028 参照

c# - IMethodInvocation の引数と入力の違い

ArgumentsコレクションとインターフェイスのInputsコレクションの違いは何ですか?IMethodInvocation

どちらも の型ですIParameterCollection

0 投票する
1 に答える
2815 参照

asp.net-identity - ASP.NET ID 2 - ISecureDataFormat<> の注入

Unityを使用しているだけで、ここで説明されている同じ問題に答えがありません。

ISecureDataFormat<>最新の VS2013 (update 2) SPA/Web Api テンプレートに登録しようとしています。

私はもう試した

それは「機能します」が、実際にはそうではありません。なぜなら、そのツリーの次の依存関係、IDataSerializer ...、そして次の IDataProtector について不平を言うからです。

0 投票する
1 に答える
383 参照

c# - コンテナーを使用せずに構成からユニティ インターセプト

こんにちは、ユニティ インターセプトを使用しようとしています (ユニティ コンテナーは使用したくありません)。ランタイムを構成できますが、構成から構成する方法がわかりません。

私のコード:

行動:

そして、これが私がそれを呼んでいる方法です

これは機能しています。これを構成ファイルから構成する必要があります。助けてください

0 投票する
1 に答える
407 参照

c# - 属性ベースのプロパティ インターセプト。どのように?

すべての Entity インスタンスの一意のキーを生成して返すエンティティの抽象クラスがあります。キーの生成は少しコストがかかり、具体的なエンティティのプロパティ値に基づいています。キー生成に参加しているプロパティを既にマークしているKeyMemberAttributeので、必要なのは、装飾されたプロパティが変更EntityBase.Keyされるたびに = null にすることだけです。KeyMemberAttribute

したがって、次のような基本クラスを取得しました。

次に、具体的なエンティティを次のように実装しました

プロパティ値が変更されるたびKeyMemberAttributeに を に設定する必要があります。EntityBase.Keynull

0 投票する
1 に答える
2547 参照

c# - Unity でインターセプト用のインスタンスを登録する

単体テストでは、現在、Moq を使用してインターセプターとインターセプトされたクラスをモックしてから、インターセプトされたインスタンスを Unity に登録し、インターフェイスのデフォルトのインターセプターを設定しています。次に、インスタンスを解決し、インターセプトされたメソッドを呼び出し、インターセプト メソッドが呼び出されていることを確認します。

これはうまく機能しますが、すべての一貫性を保つために、サービス/シングルトンを登録するときのように、登録中に傍受を設定したいと思います。

メソッドを使用して傍受を構成するIUnityContainer.RegisterInstance()方法はありませんInjectionMembers. UnityContainer.Configure<Interception>().SetDefaultInterceptorFor<T>()解決する前に呼び出すと、実際にインスタンスで傍受を使用できます。

インターセプターを登録またはモックするより良い/簡単な方法はありますか?

0 投票する
0 に答える
121 参照

vb.net - 装飾されたメソッドが実際に呼び出されるまで、Unity コール ハンドラー属性の作成を延期 (遅延作成) または抑制します。

インターフェイス (または実装) で傍受呼び出しハンドラーとハンドラー属性を使用しようとしています。インターフェイスに DoSomething() と DoSomethingElse() の 2 つのメソッドがあり、DoSomethingElse(); のインターセプターしかないとします。メイン インターフェイスを解決すると、DoSomethingElse() を呼び出さなくても、Call Handler のコンストラクターが呼び出されます。

Lazy(of IMainInterface) に解決してこれを試しましたが、関数 DoSomething() を呼び出した瞬間に、Call Handler がまだ不必要に作成されています。コードまたは構成によってこれが発生しないようにする方法はありますか。ここに私のサンプル実装があります

ハンドラ属性とコール ハンドラ

インターフェイスと実装

メソッドを登録して実行するメインモジュール

次の出力が生成されます。

遅延解決
前 遅延関数呼び出しを行う前
メイン クラス - コンストラク
ター 通常のサンプル属性のコンストラクター
ハンドラーの作成サンプルのコンストラクター
ハンドラーの

メイン クラスが何かを行う...

DoSomethingElse() が呼び出されることはありませんが、ハンドラー作成のコストがすべてのフローに追加されます。これを回避する方法はありますか?どんな助けでも大歓迎です。

前もって感謝します!SV