問題タブ [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.
c# - Ninject XML 拡張 - プラグイン アーキテクチャ
ninject xml 拡張機能を使用して、同じ実行可能ファイル (プラグイン) に対して異なる DAL を構成しています。私の考えは、ninject xml ファイルを含むメイン アプリケーションのサブフォルダーにそれらすべて (DLL) を配置することでした。
問題は、ninject が xml で参照されているバインディングを見つけられないことです。dllをメインアプリケーション(.exe)の同じフォルダーにコピーした場合にのみ機能します。
カーネルをロードする前にdllをロードしようとしました
しかし、まだ機能しません。(エラー: 「'to' 属性で定義されたタイプ 'MyType' を解決できませんでした」 )
ninject-xml ファイルで具体的なフォルダーを参照する方法、または ninject-xml 拡張機能を使用して解決できる別のフォルダーから型をロードする方法を知っている人はいますか?
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を適切に使用して、タイプ解決のためにカーネルをセットアップするにはどうすればよいですか?
ninject - Ninject 傍受: 傍受されたメソッドを呼び出すサービスが、それ自体の中で呼び出されたときに傍受されない
Ninject 3.0 を注入したサービス クラスがあります。プロキシがインターフェイス プロキシではなくクラス プロキシになるように設定しました。このサービスには 2 つのメソッドがあります。最初のメソッドは広範な結果を返し、2 つ目のメソッドは最初のメソッドを呼び出してフィルタリングします。最初のメソッドの結果をキャッシュするインターセプターを追加しました。
サービスの外部から最初のメソッドを呼び出すと、傍受は正常に機能します。
問題は、インターセプターが 2 番目のメソッドを呼び出すときに、プロキシ経由ではなくサービス自体を介して呼び出すため、サービスからの最初のメソッドへの呼び出しがインターセプトされず、キャッシュされないことです。
どうすればこれを機能させることができますか?
更新: サンプル コードを追加
これは私の頭の上にあるので、何かがコンパイルされていないように見える場合は申し訳ありません
これはサービスクラスのサンプルです
CacheMethodOutputAttribute は単純な属性クラスです
バインディングの例を次に示します (これは、インターフェイス プロキシの代わりにクラス プロキシを使用することを確認する方法ですが、実際にはインターフェイスによって注入された参照を残します)。
そのため、IService が挿入されている任意のクラスから GetObjects を呼び出すと、インターセプターがトリガーされますが、Service 自体の GetObject メソッドからはトリガーされません。
CacheAttributeInterceptor は次のようになります (ただし、実装の詳細は関係ありません)。
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 を使用して、私の IFooMethodInfo
をinvocation.Request.Target.GetType()
(実装タイプを返す - Foo
)に変換しますMethodInfo
。
推奨事項はありますか?
c# - Ninject.Extensions.Logging を使用して void Main でロガーを取得するには?
私はNinject
DIとNinject.Extensions.Logging
(NLogを使用して)Loggerインジェクションに使用しています。プログラムの開始時に Main void で Logger のインスタンスを取得したいと考えています。
私はこのコードを試しました:
しかし、エラーが発生しますError loading module 'Ninject.Extensions.Logging.NLog2.NLogModule' of type NLogModule
。
このメソッドで Logger インスタンスを取得するにはどうすればよいですか?
asp.net-mvc - Ninject Intercept モジュールを接続するには?
Ninject、Ninject.Extensions.Interception、および Ninject.Extensions.Interception.DynamicProxy を NuGet 経由でインストールしました。次のモジュールがあります。
TimingInterceptor の場所
さて、モジュールをninjectカーネルに接続してサイトを実行しようとすると
次のエラーが発生しました。
基本的に、特定のことをログに記録したいアクションメソッドが呼び出されるたびに、ASP.NET MVC アプリのログを記録しようとしています。しかし、このエラーを回避する方法がわかりません。経験のある人は、私が間違っていることを指摘してもらえますか? ありがとう。
c# - NInject 3 規則 NInject 属性が注入されない
以下のコンストラクトを持つクラスの場合、コンストラクター注入はうまく機能しますが、プロパティではありません。Inject
属性を機能させるために、規則に他に何を追加する必要がありますか
NInjectWebCommon.cs のバインディング
c# - NinjectServiceHostFactory に WSHttpBinding を追加する方法
NinjectWebCommonクラスがApp_startで実行された後、次のように WCF インターフェイスをサービスにバインドします。
IAccountServiceへのWSHttpBinding呼び出しを受け入れるようにシステムに指示するにはどうすればよいですか?
参照用の私の .svc は次のとおりです。
(注: 私はNinject.Extensions.Wcfを使用していますが、 BasicHttpBindingのみが「すぐに」動作するようです)
c# - NinjectDependencyCreatorとEventBrokerによる生涯管理
かなり大規模なプロジェクトでNinjectを使用しており、 DependencyCreationおよびEventBroker拡張機能を利用したいと考えています。
Dependency Creation readmeは、次の例を示しています(ただし、現在はInCreatorScope
名前が変更されている可能性がありますInDependencyCreatorScope
)
この例では、コンテナを介して、相互に「ハード」参照を持つ場合Parent
としない場合の依存関係を作成します。Dependency
これにより、コンポーネント間の緩い結合が促進され、イベントハンドラーを明示的に接続しなくても、イベントブローカーを使用してイベントを公開Parent
およびサブスクライブできます。Dependency
私の質問はこれです:他のオブジェクトに注入され、標準のアクティベーションの有効期間Dependency
を持たせたい場合はどうなりますか?RequestScope
標準のアクティベーションにはリクエストスコープを使用しますが、一緒に作成すると依存関係の作成者スコープを使用することをどのように指定しParent
ますか?
ninject - DependencyCreationおよびEventBroker拡張機能を挿入します。1対1のサブスクリプションの確保
Ninject Event Broker拡張機能を使用しており、2つのサービスがあります。ServiceOne
イベントの発行者です。ServiceTwo
サブスクライバーです。ServiceOne
に強い依存関係はありませんServiceTwo
。DependencyCreation拡張機能を使用して依存関係を作成しています。
要件は次のとおりです。
- これら2つのオブジェクト間で1対1のイベントを定義したいと思います。
ServiceTwo
DependencyCreationによって作成されたインスタンスのみがイベントを受信する必要があります。 ServiceTwo
オブジェクトグラフのさらに下に他のインスタンスがある場合、それらはイベントを受信しないはずです。(これは当てはまらないはずですが、私はそれを説明したいと思います)ServiceTwo
廃棄時に廃棄する必要がありますServiceOne
。- これはWebアプリケーションであり、の有効期間は
ServiceOne
1つのリクエストのみである必要があります。
基本的に、私は自分が書いている動作を再現しようとしています。
1つの出版社。1人の加入者。Subscriber2はイベントを取得しません。
これが私のコードです:
2つの質問。
これは私の要件を満たしていますか?もっと良い方法はありますか?