問題タブ [ninject-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.
ninject - Ninject.Extensions.Interception が機能しない
私はこれを理解しようと何年も努力してきました。クラスをインターセプターにバインドしようとすると、行で次の例外が発生します
Ninject コンポーネント IAdviceFactory のロード中にエラーが発生しました。そのようなコンポーネントはカーネルのコンポーネント コンテナに登録されていません
LoadExtensions の有無にかかわらず試してみましたが、モジュールを使用してバインディングをセットアップしたところ、最後の試みは次のようになりました
私のロガー属性は次のようになります
そして、私のインターセプターはこのように
ninject - 名前空間レベルでの Ninject 傍受?
Ninject.Extensions.Interception 拡張機能でインターセプトを設定して、名前空間またはアセンブリ内のすべてのクラスに適用する方法はありますか?
現在、私はこのようにクラスごとにそれをしなければなりません
ninject - Ninject Interception - Ninject 3.0 への移植時の破壊的変更
私の環境について説明します。Ninject + Ninject Interception Extension を使用して、特別な属性でマークされたすべてのメソッドのインターセプターの自動登録を有効にしています。これは、一般的な AoP + 属性 + DI コンテナーのシナリオです。
私の問題は次のとおりです。Ninject および Ninject Interception Extension - 3.0 の最新バージョンに移植すると、インターセプターが実行されるはずのときに例外が発生し始めます。私の InterceptorRegistrationStrategy は、属性付きの型を解決してインターセプターを登録するときに正常に機能します。ただし、傍受されたメソッドを実行すると、次の例外が発生します。
私はReflectorに頼り、Ninject Interception Extensionソースを使用してこの問題を解決しなければなりません。十分なドキュメントがなく、悪い立場に置かれています。
Ninject 3.0 への移植時に同じ例外が発生した人はいますか?
属性に基づいてインターセプターを自動的に登録するために使用するコードは次のとおりです。
c# - Ninject.Extensions.Interception.Linfu で複数のインターフェースを公開するプロキシ
Ninject.Extensions.Interception
(より具体的にはInterceptAttribute
) とプロキシを使用Ninject.Extensions.Interception.Linfu
して C# アプリにログ記録メカニズムを実装していますが、プロキシされたクラスが複数のインターフェイスを実装するときにいくつかの問題に直面しています。
インターフェイスを実装し、抽象クラスから継承するクラスがあります。
ServiceLocator から MyClass のインスタンスを取得しようとすると、Loggable属性によりプロキシが返されます。
問題は、返されるプロキシがAbstractClassインターフェースのみを認識し、 SomeMethod()を公開していることです。その結果、存在しない SomePropertyArgumentException
にアクセスしようとすると、エラーが発生します。
この場合、複数のインターフェイスを公開するプロキシを作成するために mixin またはその他の手法を使用する方法はありますか?
ありがとう
パウロ
c# - Ninject Interception、Castle DynamicProxy、および WPF ウィンドウを使用した AOP: ウィンドウの DynamicProxy で XAML リソースが見つかりません
実際のアプリケーションでは、メソッドまたはクラスでのロギングを有効にするために使用される属性を定義しました (通常の AOP ユース ケース)。この属性を WPF ウィンドウ クラスに適用すると、このクラスのオブジェクトを Ninject で作成できなくなります。問題を再現するための最小限の例を次に示します。
ロギング用のダミー インターセプター:
対応する属性:
ウィンドウ クラス (完全に空で、自動生成された空のグリッドのみが内部にあります):
最後に、オブジェクトが要求されるアプリの起動コード:
kernel.Get<MainWindow>();
を介してウィンドウを要求すると、アセンブリの短い名前であるURIで指定されたリソースがないことTargetInvocationException
を示す内部例外がスローされます。Castle.Proxies.MainWindowProxy
"/NinjectInterceptionWPF;component/mainwindow.xaml"
NinjectInterceptionWPF
自動的に作成された をInitializeComponent
確認MainWindow
すると、XAML コードをアドレス指定するために URI が作成されていることがわかります。これは、プロキシに不足しているようです。
私はすでに少し遊んで、絶対URIを使用しようとしましたが、LoadComponent
相対URIのみを受け入れました。
一部のインターネット検索では、多くの人が WPF バインディング (INotifyPropertyChanged) に Ninject Interception と DynmaicProxy を使用しているため、一般的には WPF ウィンドウのプロキシを構築できるはずだと思います。
しかし、どのように?
c# - ニンジェクトで迎撃。IProxyRequestFactory を読み込めません
Ninject と Interceptor パターンの使い方を学んでいます。
次のインターセプターがあります。
MyClass
そして、インターセプターがそれらで動作できるようにするために、仮想の2つの単純なメソッドしか持たないという名前のクラスを用意します。(2 つのメソッドは Echo と double で、その名前が示すとおりです。)
Ninject、Ninject.Extensions.Interception、Ninject.Extensions.Interception.DynamicProxy を NuGet 経由でプロジェクトに追加しました。
using
次のステートメントを追加しました。
ブートストラップを行う私の Main メソッドは次のようになります。
指定した行で次のエラーが発生します。
誰が私が間違っているのか教えてもらえますか?
c# - Interceptor パターンのデバッグ
Ninject で Interceptor パターンを使用する方法を学んでいます。
次のようなインターセプターがあります。
次のように、メイン メソッドで Ninject カーネルをセットアップしています。
問題は、へのメソッド呼び出しをデバッグするときmyClass
(私はステートメントにブレークポイントを置いてmyClass.methodName()
F11 を押しています)、インターセプターへの呼び出しが表示される前に、渡すスタックフレームがたくさんあることです。メソッド呼び出し。
Ninject が動的プロキシなどを作成することは認識しています。すべてのインターセプターから実際のメソッドまで、コードの流れを見たい場合。(どのインターセプターがメソッド呼び出しをブロックしているかを確認するためのデバッグを想像してください)
Ninject スタック フレームで壊れないように Visual Studio に指示する方法はありますか? (とにかくNinjectソースを持っていません)
更新 基本的に、私がやりたいことは、ソースを持っていないコードで壊れないようにVSに伝えることです...
ninject - ninjectはプライベートメソッドをインターセプトできますか?
ninjectがクラスのプライベートメソッドをインターセプトできるかどうか知りたいです。ロギングメカニズムを動的に注入するために、いくつかのaopプログラミングを実行しようとしています。
c# - パラメータを使用したメソッドレベルのインターセプトの挿入
インターセプトのチュートリアルで、メソッドをターゲットにしてインターセプトできることに気づきました。つまり
ドキュメント/チュートリアルでは、インターセプトしようとしているメソッドにパラメーターがある場合、つまりThrowsAnErrorがパラメーターとして文字列を受け入れた場合の対処方法については説明していません。
バインド時にパラメータにアクセスできないので、これを間違った方法で行っているのではないかと思っていました。
編集
ninject - Ninject 傍受: 傍受されたメソッドを呼び出すサービスが、それ自体の中で呼び出されたときに傍受されない
Ninject 3.0 を注入したサービス クラスがあります。プロキシがインターフェイス プロキシではなくクラス プロキシになるように設定しました。このサービスには 2 つのメソッドがあります。最初のメソッドは広範な結果を返し、2 つ目のメソッドは最初のメソッドを呼び出してフィルタリングします。最初のメソッドの結果をキャッシュするインターセプターを追加しました。
サービスの外部から最初のメソッドを呼び出すと、傍受は正常に機能します。
問題は、インターセプターが 2 番目のメソッドを呼び出すときに、プロキシ経由ではなくサービス自体を介して呼び出すため、サービスからの最初のメソッドへの呼び出しがインターセプトされず、キャッシュされないことです。
どうすればこれを機能させることができますか?
更新: サンプル コードを追加
これは私の頭の上にあるので、何かがコンパイルされていないように見える場合は申し訳ありません
これはサービスクラスのサンプルです
CacheMethodOutputAttribute は単純な属性クラスです
バインディングの例を次に示します (これは、インターフェイス プロキシの代わりにクラス プロキシを使用することを確認する方法ですが、実際にはインターフェイスによって注入された参照を残します)。
そのため、IService が挿入されている任意のクラスから GetObjects を呼び出すと、インターセプターがトリガーされますが、Service 自体の GetObject メソッドからはトリガーされません。
CacheAttributeInterceptor は次のようになります (ただし、実装の詳細は関係ありません)。