問題タブ [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.
unity-container - インターフェース インターセプターを使用した慣例による Unity 登録により、「[type] はインターセプトできません」という例外が発生する
WithMappings.FromMatchingInterface
特定のインターフェースを実装するすべてのクラスを規約で Unity に登録したい。さらに、登録されているすべてのオブジェクトを、インターフェイス インターセプト動作を使用してインターセプトしたいと考えています。問題は、Unity が具象クラス間のマッピングも登録し、それらのクラスが解決されると、次のメッセージとともに例外がスローされることです。
「[type] は傍受できません」
具象クラス タイプを使用してオブジェクトを解決することはベスト プラクティスではないことは理解していますが、慣例に従って登録するときに、Unity がインターフェース -> 具象クラスと具象クラス -> 具象クラスの両方のマッピングを自動的に追加するのはなぜでしょうか? これは、インターフェイス インターセプターを追加して具象型を使用して解決すると、機能しないことを意味します。
これに対する私の望ましい結果は、Unity が、慣例に従って登録し、インターフェイス インターセプターを与えるときに、具象型 -> 具象型マッピングを追加しなかったことです。そうすれば、必要に応じて具象型を使用してクラスを解決できます。インターセプトを取得しません。
VirtualMethodInterceptor
インターセプトが機能するためにクラスに変更を加えたくないので、 を使用したくありません。これには からの継承が含まれMarshalByRef
ます。また、すべてのオブジェクトを個別に登録することも避けたいです。
したがって、私の質問は、規則に従って登録するときにインターフェイス マッピングだけを登録するにはどうすればよいですか?
更新:クラスを個別に登録すると同じ問題が発生するため、オブジェクトがインターフェイスインターセプターに登録されると、具象型を使用して解決できないと想定されます。
新しい登録コード:
更新 2すべてのインターフェイスにデフォルトのインターセプターを追加することは機能しているようですが、このソリューションはややハックです。このソリューションでは、規約による標準登録の直前に少しコードを追加InterfaceInterceptor
し、規約ベースの登録で を削除する必要があります。
事前登録コード
ジレンマを説明するいくつかのコード:
c# - IMethodInvocation の引数と入力の違い
Arguments
コレクションとインターフェイスのInputs
コレクションの違いは何ですか?IMethodInvocation
どちらも の型ですIParameterCollection
。
asp.net-identity - ASP.NET ID 2 - ISecureDataFormat<> の注入
Unityを使用しているだけで、ここで説明されている同じ問題に答えがありません。
ISecureDataFormat<>
最新の VS2013 (update 2) SPA/Web Api テンプレートに登録しようとしています。
私はもう試した
それは「機能します」が、実際にはそうではありません。なぜなら、そのツリーの次の依存関係、IDataSerializer ...、そして次の IDataProtector について不平を言うからです。
c# - コンテナーを使用せずに構成からユニティ インターセプト
こんにちは、ユニティ インターセプトを使用しようとしています (ユニティ コンテナーは使用したくありません)。ランタイムを構成できますが、構成から構成する方法がわかりません。
私のコード:
行動:
そして、これが私がそれを呼んでいる方法です
これは機能しています。これを構成ファイルから構成する必要があります。助けてください
c# - 属性ベースのプロパティ インターセプト。どのように?
すべての Entity インスタンスの一意のキーを生成して返すエンティティの抽象クラスがあります。キーの生成は少しコストがかかり、具体的なエンティティのプロパティ値に基づいています。キー生成に参加しているプロパティを既にマークしているKeyMemberAttribute
ので、必要なのは、装飾されたプロパティが変更EntityBase.Key
されるたびに = null にすることだけです。KeyMemberAttribute
したがって、次のような基本クラスを取得しました。
次に、具体的なエンティティを次のように実装しました
プロパティ値が変更されるたびKeyMemberAttribute
に を に設定する必要があります。EntityBase.Key
null
c# - Unity でインターセプト用のインスタンスを登録する
単体テストでは、現在、Moq を使用してインターセプターとインターセプトされたクラスをモックしてから、インターセプトされたインスタンスを Unity に登録し、インターフェイスのデフォルトのインターセプターを設定しています。次に、インスタンスを解決し、インターセプトされたメソッドを呼び出し、インターセプト メソッドが呼び出されていることを確認します。
これはうまく機能しますが、すべての一貫性を保つために、サービス/シングルトンを登録するときのように、登録中に傍受を設定したいと思います。
メソッドを使用して傍受を構成するIUnityContainer.RegisterInstance()
方法はありませんInjectionMembers
. UnityContainer.Configure<Interception>().SetDefaultInterceptorFor<T>()
解決する前に呼び出すと、実際にインスタンスで傍受を使用できます。
インターセプターを登録またはモックするより良い/簡単な方法はありますか?
vb.net - 装飾されたメソッドが実際に呼び出されるまで、Unity コール ハンドラー属性の作成を延期 (遅延作成) または抑制します。
インターフェイス (または実装) で傍受呼び出しハンドラーとハンドラー属性を使用しようとしています。インターフェイスに DoSomething() と DoSomethingElse() の 2 つのメソッドがあり、DoSomethingElse(); のインターセプターしかないとします。メイン インターフェイスを解決すると、DoSomethingElse() を呼び出さなくても、Call Handler のコンストラクターが呼び出されます。
Lazy(of IMainInterface) に解決してこれを試しましたが、関数 DoSomething() を呼び出した瞬間に、Call Handler がまだ不必要に作成されています。コードまたは構成によってこれが発生しないようにする方法はありますか。ここに私のサンプル実装があります
ハンドラ属性とコール ハンドラ
インターフェイスと実装
メソッドを登録して実行するメインモジュール
次の出力が生成されます。
遅延解決
前 遅延関数呼び出しを行う前
メイン クラス - コンストラク
ター 通常のサンプル属性のコンストラクター
ハンドラーの作成サンプルのコンストラクター
ハンドラーの
メイン クラスが何かを行う...
DoSomethingElse() が呼び出されることはありませんが、ハンドラー作成のコストがすべてのフローに追加されます。これを回避する方法はありますか?どんな助けでも大歓迎です。
前もって感謝します!SV