問題タブ [ninject-extensions]

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 投票する
2 に答える
605 参照

c# - Ninject XML 拡張 - プラグイン アーキテクチャ

ninject xml 拡張機能を使用して、同じ実行可能ファイル (プラグイン) に対して異なる DAL を構成しています。私の考えは、ninject xml ファイルを含むメイン アプリケーションのサブフォルダーにそれらすべて (DLL) を配置することでした。

問題は、ninject が xml で参照されているバインディングを見つけられないことです。dllをメインアプリケーション(.exe)の同じフォルダーにコピーした場合にのみ機能します。

カーネルをロードする前にdllをロードしようとしました

しかし、まだ機能しません。(エラー: 「'to' 属性で定義されたタイプ 'MyType' を解決できませんでした」 )

ninject-xml ファイルで具体的なフォルダーを参照する方法、または ninject-xml 拡張機能を使用して解決できる別のフォルダーから型をロードする方法を知っている人はいますか?

0 投票する
3 に答える
8303 参照

c# - Ninjectは、複数のアセンブリを持つWebApiプロジェクトでアクティベーション例外をスローします

私のasp.netWebApiプロジェクトは、サービス、コア、およびデータアクセス用の複数のアセンブリで構成されています。プロジェクトでDIコンテナとしてNinjectを使用するために、NuGetからNinject.Web.Commonパッケージを追加しました。次に、IDependencyResolverを次のように実装しました。

これが私のNinject.Web.Common.csです。

例外は

さまざまな登録(コメントアウト)を使用しましたが、機能しません。NinjectWebCommon.cs-> CreateKernel()メソッドのブレークポイントがヒットし、GetService(System.Type serviceType)メソッドのブレークポイントもヒットします。AppDomain.CurrentDomain.RelativeSearchPathは、アプリのbinディレクトリに解決され、IHostBufferPolicySelectorタイプを含むSystem.Web.Http.dllを含むすべてのdllが含まれます。

Ninject.Extensions.Conventionsを適切に使用して、タイプ解決のためにカーネルをセットアップするにはどうすればよいですか?

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

ninject - Ninject 傍受: 傍受されたメソッドを呼び出すサービスが、それ自体の中で呼び出されたときに傍受されない

Ninject 3.0 を注入したサービス クラスがあります。プロキシがインターフェイス プロキシではなくクラス プロキシになるように設定しました。このサービスには 2 つのメソッドがあります。最初のメソッドは広範な結果を返し、2 つ目のメソッドは最初のメソッドを呼び出してフィルタリングします。最初のメソッドの結果をキャッシュするインターセプターを追加しました。

サービスの外部から最初のメソッドを呼び出すと、傍受は正常に機能します。

問題は、インターセプターが 2 番目のメソッドを呼び出すときに、プロキシ経由ではなくサービス自体を介して呼び出すため、サービスからの最初のメソッドへの呼び出しがインターセプトされず、キャッシュされないことです。

どうすればこれを機能させることができますか?

更新: サンプル コードを追加

これは私の頭の上にあるので、何かがコンパイルされていないように見える場合は申し訳ありません

これはサービスクラスのサンプルです

CacheMethodOutputAttribute は単純な属性クラスです

バインディングの例を次に示します (これは、インターフェイス プロキシの代わりにクラス プロキシを使用することを確認する方法ですが、実際にはインターフェイスによって注入された参照を残します)。

そのため、IService が挿入されている任意のクラスから GetObjects を呼び出すと、インターセプターがトリガーされますが、Service 自体の GetObject メソッドからはトリガーされません。

CacheAttributeInterceptor は次のようになります (ただし、実装の詳細は関係ありません)。

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

c# - メソッド属性による Ninject Interception 3.0 インターフェイス プロキシ

比較的大きなコードベースを Ninject 2.2 から Ninject 3.0 にアップグレードしました。私たちが使用するインターセプトにいくつかの変更を加える必要があったことを除いて、すべてが計画どおりに進んでいるようです.

この縮小バージョンは、Ninject 2.3 で大きな効果を発揮するために使用したものです。インターフェイス プロキシが許可されていないため、すべてのメソッドを仮想としてマークし、Castle 動的プロキシがそれらをオーバーライドできるようにしました。

[LogMethod] をインターフェイス レベルに移動して、インターフェイス プロキシを使用します。

ただし、移動すると、Ninject はこのクラスを傍受したいことを検出しなくなります。また、そのままにしておくと、微妙な問題が発生します。

これinvocation.Request.Methodは Interface からの MethodInfo ですIFoo。実装Fooではありません。これは、属性を取得できなくなったことを意味します。したがって、現時点ではこれら2つの問題の間で立ち往生しています-属性をインターフェースに配置すると、Ninjectはプロキシを作成しません.実装に属性を配置すると、属性を簡単に取得してそのプロパティにアクセスできません。現時点で私の唯一の解決策はこれです:

または、InterfaceMapping を使用して、私の IFooMethodInfoinvocation.Request.Target.GetType()(実装タイプを返す - Foo)に変換しますMethodInfo

推奨事項はありますか?

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

c# - Ninject.Extensions.Logging を使用して void Main でロガーを取得するには?

私はNinjectDIとNinject.Extensions.Logging(NLogを使用して)Loggerインジェクションに使用しています。プログラムの開始時に Main void で Logger のインスタンスを取得したいと考えています。

私はこのコードを試しました:

しかし、エラーが発生しますError loading module 'Ninject.Extensions.Logging.NLog2.NLogModule' of type NLogModule

このメソッドで Logger インスタンスを取得するにはどうすればよいですか?

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

asp.net-mvc - Ninject Intercept モジュールを接続するには?

Ninject、Ninject.Extensions.Interception、および Ninject.Extensions.Interception.DynamicProxy を NuGet 経由でインストールしました。次のモジュールがあります。

TimingInterceptor の場所

さて、モジュールをninjectカーネルに接続してサイトを実行しようとすると

次のエラーが発生しました。

基本的に、特定のことをログに記録したいアクションメソッドが呼び出されるたびに、ASP.NET MVC アプリのログを記録しようとしています。しかし、このエラーを回避する方法がわかりません。経験のある人は、私が間違っていることを指摘してもらえますか? ありがとう。

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

c# - NInject 3 規則 NInject 属性が注入されない

以下のコンストラクトを持つクラスの場合、コンストラクター注入はうまく機能しますが、プロパティではありません。Inject属性を機能させるために、規則に他に何を追加する必要がありますか

NInjectWebCommon.cs のバインディング

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

c# - NinjectServiceHostFactory に WSHttpBinding を追加する方法

NinjectWebCommonクラスがApp_startで実行された後、次のように WCF インターフェイスをサービスにバインドします。

IAccountServiceへのWSHttpBinding呼び出しを受け入れるようにシステムに指示するにはどうすればよいですか?

参照用の私の .svc は次のとおりです。

(注: 私はNinject.Extensions.Wcfを使用していますが、 BasicHttpBindingのみが「すぐに」動作するようです)

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

c# - NinjectDependencyCreatorとEventBrokerによる生涯管理

かなり大規模なプロジェクトでNinjectを使用しており、 DependencyCreationおよびEventBroker拡張機能を利用したいと考えています。

Dependency Creation readmeは、次の例を示しています(ただし、現在はInCreatorScope名前が変更されている可能性がありますInDependencyCreatorScope

この例では、コンテナを介して、相互に「ハード」参照を持つ場合Parentとしない場合の依存関係を作成します。Dependencyこれにより、コンポーネント間の緩い結合が促進され、イベントハンドラーを明示的に接続しなくても、イベントブローカーを使用してイベントを公開Parentおよびサブスクライブできます。Dependency

私の質問はこれです:他のオブジェクトに注入され、標準のアクティベーションの有効期間Dependencyを持たせたい場合はどうなりますか?RequestScope標準のアクティベーションにはリクエストスコープを使用しますが、一緒に作成すると依存関係の作成者スコープを使用することをどのように指定しParentますか?

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

ninject - DependencyCreationおよびEventBroker拡張機能を挿入します。1対1のサブスクリプションの確保

Ninject Event Broker拡張機能を使用しており、2つのサービスがあります。ServiceOneイベントの発行者です。ServiceTwoサブスクライバーです。ServiceOneに強い依存関係はありませんServiceTwo。DependencyCreation拡張機能を使用して依存関係を作成しています。

要件は次のとおりです。

  • これら2つのオブジェクト間で1対1のイベントを定義したいと思います。ServiceTwoDependencyCreationによって作成されたインスタンスのみがイベントを受信する必要があります。
  • ServiceTwoオブジェクトグラフのさらに下に他のインスタンスがある場合、それらはイベントを受信しないはずです。(これは当てはまらないはずですが、私はそれを説明したいと思います)
  • ServiceTwo廃棄時に廃棄する必要がありますServiceOne
  • これはWebアプリケーションであり、の有効期間はServiceOne1つのリクエストのみである必要があります。

基本的に、私は自分が書いている動作を再現しようとしています。

1つの出版社。1人の加入者。Subscriber2はイベントを取得しません。

これが私のコードです:

2つの質問。

これは私の要件を満たしていますか?もっと良い方法はありますか?