問題タブ [ninject-3]
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 - 複数のFromを使用したNinjectコンベンション
NinjectModuleに、複数のアセンブリのすべてのインターフェイスのモックバインディングを設定するコードがあります。Ninject 2を使用すると、ラムダFrom()
内でメソッドを複数回呼び出すことができました。Scan
From()
Ninject 3の新しい方法では、私が知る限り、連鎖呼び出しは許可されていません。これは私が思いつくことができる最高の同等物です:
上記のように、1つのアセンブリが複数回読み込まれると、新しいコードが壊れます*。first
とsecond
変数は異なるタイプであるため、これらを単純に1つの呼び出しに結合することはできません。私の実際の製品コードにも同じ問題がありますが、もちろん、同じアセンブリ名を2回ハードコーディングしているだけではありません。
From()
では、上記を書き直して、複数の呼び出しを組み合わせて1回だけ呼び出すことができるようにするにはどうすればよいBindWith<>
ですか?
編集
*バインディングコード自体は問題なく実行されます。例外は、2回バインドされたアセンブリに存在するインターフェイスのインスタンスを取得しようとすると発生します。
model-view-controller - Ninject3.0MVCカーネルスキャンが機能しない
Ninject 3.0のkernel.Scanはどうなりましたか?
ビルドエラーが発生します。'Ninject.IKernel'には、'Scan'の定義が含まれておらず、タイプ'Ninject.IKernel'の最初の引数を受け入れる拡張メソッド'Scan'が含まれていません。
それを何に変えるべきかを理解しようとして何時間も頭を叩いてきました。これを簡単に修正する方法を説明する良いサイトや投稿を見たことがありません。
これはすべて完全に正常に機能しており、一部のninjectがアップグレードされました。何も機能しなかった理由を何時間も理解した後。私はそれを(知って)再インストールしませんでした、何が起こったのかわかりませんが、今はすべてを3.0に再インストールし、それがより良いと考えました、今私は助けの欠如で立ち往生しています。
c# - 構成ファイルのオフ値に基づくWCF ServiceContractの具体的な実装を動的に挿入する
次のサービス コントラクトと 2 つの具体的な実装があるとします。
これらは、ServiceBehavior
構成ファイルに基づいてサービスが実行されている間にインスタンスを作成できるように、属性が付けられています。
私の質問は、構成ファイルの値の変化に基づいて Ninject を使用して具体的な実装を挿入するにはどうすればよいですか? 私は次のことをしなければならないようです:
そして、でInstanceProvider
:
ただし、構成ファイルの値を変更しても、Ninject のバインディングは変更されません。構成ファイルの値に基づいてバインディングを変更する方法はありますか? ここで何か間違ったことをしていますか?
c# - それらすべてを実装するクラスの同じインスタンスに異なるインターフェースをバインドすることは可能ですか?
私は次の(単純化された)状況にあります:私は2つのインターフェースを持っています
と
および両方を実装するクラス:
次に、Ninjectを使用して同じクラスを両方のインターフェイスにバインドします。同じビーイングのインスタンスを使用したいので、ある種のシングルトンが必要なことは明らかです。ninject.extensions.namedscopeを試してみましたが、成功しませんでした。私の最後の試みは:IAmAnImplementation
IAmAnInterface
IAmAnInterfaceToo
InScope()
しかし、残念ながら、それを介してテストクラスのインスタンスを要求するkernel.Get<IDependOnBothInterfaces>();
と、実際にはの異なるインスタンスが使用されますIAmAnImplementation
。
NinjectにIAmAnImplementation
forIAmAnInterface
と同じインスタンスを使用するように指示する方法はありますIAmAnInterfaceToo
か?
conventions - Ninject 3.0 での規約ベースのバインディング
新しいプロジェクトで Ninject をセットアップしようとしていますが、convetion を使用してアセンブリをスキャンしたいので、
に自動的に解決されます
すべてのサンプルとドキュメントでは、このアプローチの使用について説明しています
Ninject 3 カーネルは代わりに .Load を使用しているようです。スキャンに Load を使用している場合、規則を使用してスキャンを構成するにはどうすればよいですか?
編集
次を使用して機能させることができました:https://github.com/ninject/ninject.extensions.conventions/wiki/What-is-configuration-by-convention
ただし、モジュールをロードできません。以下のコードを使用していますが、以下のエラーが発生します。
エラー:
c# - Ninject 3.0 でデフォルトのパラメーター値を使用する
デフォルト値を持つパラメーターを持つコンストラクターを持つクラスがあります。Ninject 2.2 では、次のように宣言されたコンストラクターに対してバインディングが定義されていなく[Optional]
ても、属性を尊重し、正常に動作します。
Ninject 3.0 にアップグレードして以来、このオブジェクトの構築は失敗し、プロバイダーが null を返したことを示すメッセージが表示されます。
テスト メソッド ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest が例外をスローしました:
Ninject.ActivationException: IValidator{PersonName} の条件付き暗黙的自己バインディングを使用して IValidator{PersonName} をアクティブ化中にエラーが発生しました
プロバイダーが null を返しました。
アクティベーション パス:
2) EmployeeValidator 型のコンストラクターのパラメーター personNameValidator への依存関係 IValidator{PersonName} の注入
1) IValidator{Employee} のリクエスト
提案:
1) プロバイダーが作成要求を適切に処理することを確認します。
パラメータのデフォルト値が存在する場合、[Optional]
属性は引き続き尊重されますか?このようなオプションのパラメータで注入を処理する最良の方法は何ですか?
visual-studio-2010 - Ninject ToFactoryはResharperユニットテストで機能しますが、NCrunchでは機能しません
Ninject3でNinject.Extensions.Factoryを使用してファクトリを作成していますIFoo
。ファクトリは、ファクトリに提供された文字列に基づいてさまざまなタイプを作成します。私は合格したユニットテストを持っていますが、奇妙なことに、Resharperテストランナーだけです。NCrunchテストランナーでは失敗します。これはNCrunch構成の問題ですか、それともコードを変更する必要がありますか?
インターフェース:
Ninjectバインディング:
テスト:
そしてNCrunchの例外:
.net - .NET 4 System.ServiceProcess.ServiceBase を使用して Ninject v2 を v3 にアップグレードする
Ninject v3 を使用して、.NET4 Windows サービス ( System.ServiceProcess.ServiceBase
) 内でホストされている Web サービスをテストしようとしています。
を作成しMyServerModule : NinjectModule
、その中で、設定Load()
に基づいてインターフェイスをランタイム オブジェクトに条件付きでバインドしapp.config
ます。
の初期化手順は次のとおりです。まず、インスタンスに基づいてServiceBase.OnStart()
新しいを作成し、それを Ninject コンテナに関連付けます。次に、サービス クラスに基づいてのインスタンスを作成し、サービス ホストを開いてリッスンを開始します。StandardKernel
MyServerModule
NinjectServiceHost
Ninject v2 では、コードは次のとおりです。
ただし、Ninject v3 ではKernelContainer
存在しなくなりました。さらに、NinjectServiceHost()
をサブクラス化するサーバー ファクトリを受け入れるようになりましたIServiceBehavior
。
Ninject v3 で同様の初期化手順を実行するにはどうすればよいですか?
asp.net-mvc-3 - 「リソースが見つかりません」を取得します。Ninject使用時のエラー
私は依存性注入フレームワークとして Ninject を使用して、ASP.NET MVC 3.0 アプリケーションに取り組んでいます。
したがって、次のように NinjectHttpApplication からコントローラーを継承しました。
しかし、アプリケーションを実行してコントローラーを参照しようとすると、次のエラーが表示されます。
リソースが見つかりません。
説明: HTTP 404。探しているリソース (またはその依存関係の 1 つ) は、削除されたか、名前が変更されたか、一時的に利用できない可能性があります。次の URL を見直して、スペルが正しいことを確認してください。
要求された URL: /Home/Index
何が原因で、どうすれば修正できますか?
ninject - 参照されていないコンポーネントのバインディング スコープを指定する ninject
デスクトップ アプリと Web アプリの両方で使用するためのライブラリがあります。
このライブラリには、デスクトップではシングルトンとしてバインドする必要があり、Web ではリクエスト スコープにする必要がある外部データ アクセス コンポーネントへの参照があります。
- デスクトップ プロジェクトはコア プロジェクトを参照します
- Web プロジェクトの参照コア プロジェクト
- コア プロジェクトは ExternalComponent を参照します
今日、私はWebクライアントでこれを行うことを余儀なくされています:
デスクトップクライアントでも同じですが、InSingletonScope()
これにより、WebアプリとデスクトップアプリがExternalComponent.dllを参照するようになりますが、これは私の意図ではありません。
クライアントがこのデータ アクセス コンポーネントを参照することなく、この外部コンポーネントが必要なスコープをクライアント (Web またはデスクトップ) から指定できるように、バインディングを作成するにはどうすればよいですか?
クライアントが必要とするスコープを受け取り、すべてを設定する Core プロジェクトのいくつかのメソッドを考えていますが、Ninject API でそれを実行できるものを見つけることができません。