問題タブ [ninject-2]
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.
asp.net - カスタム メンバーシップ プロバイダーを使用した依存関係の挿入
カスタム メンバーシップ プロバイダーを実装する ASP.NET MVC Web アプリケーションがあります。カスタム メンバーシップ プロバイダーはUserRepository
、メンバーシップ プロバイダーと NHibernate の間のインターフェイスを提供するコンストラクターに を受け取ります。これUserRepository
は Ninject IoC コンテナーによって提供されます。
ただし、明らかに、プロバイダーが .NET によってインスタンス化されている場合、これは機能しません。パラメーターなしのコンストラクターには UserRepository がなく、作成できません (UserRepository では、コンストラクターに NHibernate セッションを渡す必要があります)。データ ストアにアクセスできません。オブジェクトの依存関係を解決するにはどうすればよいですか?
これは既存のアプリケーションを Ninject で改良したものであることに注意してください。以前は、単体テストを支援するために、パラメーター付きコンストラクターと組み合わせて必要な依存関係を作成できるパラメーターなしコンストラクターを使用していました。
何か考えはありますか?
asp.net-mvc - Asp.net Mvc-Kigg:リクエスト間でHttpContext.Itemsのユーザーオブジェクトを維持する
まず、これが怠惰に見えないことを願っていますが、次のプロジェクトのコードを理解するのに問題があります。
ソースコードを調べていたところ、自分が作成している小さなプロジェクトに役立つものに気づきました。BaseControllerには、次のコードがあります。
これは、必要に応じて少し調整したコードの正確なコピーではありません。私がまだ理解しているコードのこの部分。IUserをHttpContext.Itemsに格納します。Userオブジェクトが必要になるたびにデータベースを呼び出す必要がないようにするためだと思います。
私が理解していない部分は、リクエストの合間にこのオブジェクトをどのように維持するかです。私が正しく理解していれば、HttpContext.Itemsはリクエストごとのキャッシュストレージです。
それで、もう少し掘り下げた後、私は次のコードを見つけました。
これは私が理解できない魔法が起こる部分です。彼らはUnityを使用して各リクエストに依存性注入を行っていると思いますか?私のプロジェクトではNinjectを使用していますが、どうすれば同じ結果が得られるのでしょうか。
NinjectのInRequestScopeはUnityPerWebRequestLifetimeManagerと同じだと思いますか?また、どのクラス/メソッドがどのインターフェイスにバインドされているのか疑問に思っていますか?HttpContext.Itemsはリクエストごとに破棄されるため、ユーザーオブジェクトの損失を防ぐにはどうすればよいですか?
とにかく長い質問なので、正しい方向に進んでくれたことに感謝しています。
c# - 拡張関数を使用して静的クラスに ninject 自体を注入する方法
リポジトリ パターンを使用してエンティティに「ビジネス ロジック」を追加する拡張メソッドを備えた静的クラスをいくつか取得しました。
IRepository
これらの拡張機能で新しいものを作成する必要がある場合があります。
私は現在、拡張しているオブジェクトを介して Ninject カーネルにアクセスすることで回避していますが、それは本当に醜いです:
また、ファクトリから何らかの形で Ninject カーネルにアクセスする静的コンストラクターを作成することもできますが、Ninject 2 にはそのためのインフラストラクチャが既にありますか?
誰もがより良い解決策を知っていますか? ビジネスロジックを実装するこの方法について、誰かコメントはありますか?
c# - Ninject:抽象クラス
依存性注入をNinjectで機能させるには、抽象クラスで何か別のことをする必要がありますか?
次のコードのベースコントローラーがあります。
私のモジュールは次のようになります。
そしてこれは私のGlobal.asax
です:
IAccountRepository
プロパティを属性で装飾すると機能し[Inject]
ます。
ninject - Ninject:共有DI/IoCコンテナ
アプリケーションのさまざまなレイヤー間でコンテナーを共有したいと思います。コンテナを初期化し、コンテナに型を登録する静的クラスの作成を開始しました。
Resolveメソッドもあることに気づきました。ResolveとGetの違いは何ですか?
私の単体テストでは、コンテナに登録されているすべてのタイプが常に必要なわけではありません。空のコンテナを初期化してから、必要なタイプを登録する方法はありますか?ユニットテストでもタイプをモックするので、それらも登録する必要があります。
Injectメソッドがありますが、インスタンスのライフサイクルが管理されていないと表示されますか?
誰かが私を正しい方法で設定してくれませんか?
オブジェクトを登録、登録解除、およびコンテナをリセットするにはどうすればよいですか。
.net - MVCアプリでNinjectのIKernelコンテナをリセットする最良の方法は何ですか?
基本的に私のGlobal.asax
コードには、IKernel
このような Ninject セットアップ用の次のプロパティがあります (Microsoft.Practices.ServiceLocation も利用しています)。このコンテナは、CreateKernel()
オーバーライドされたように見えると自動的に呼び出されます。
そして私のコンテナプロパティ:
ご覧のとおり、インターフェイス<->サービスバインディングのリストを定義するモジュールを1つだけロードしていますが、これはこの問題にとって重要ではありませんが、私の問題は-どんなに頑張っても取得できませんmy _ container
null は、MVC Web サイトを再起動したときに最初にインスタンス化されると、再び返されます。Web.config ファイルの編集と再保存 (古き良きトリック) から、アプリケーション プールのフラッシュや IIS の再起動 (!) まで、私のコンテナーはまだ存在しているようです。どうしてこうなるのか、私には本当に理解できません。初期ロード_container
が null であり、SiteModule
正しくロードされることはわかっています。
新しく作成されたサービスにいくつかの新しいバインディングを追加したいのですが、コンテナが決してnullに戻らないため、これはもちろん問題です:P
ご参考までに。ブレークポイントをコンテナーの null テストに移動しても、これがうまくいかないようです。これで問題が解決しない理由を聞かないでください。エラーはありません。すべてが正常にマップされます。
ありがとう、あなたが見る必要があると感じたらSiteModule()
私に知らせてください、そして私はこの投稿をコードで拡張することができます.
ninject - Ninject: Silverlight でモジュールを動的にロードする
モジュールを動的にロードする理由は、循環依存の問題を回避するためです。次のレイヤーがあります View --> ViewModel --> DataProvider --> ServiceClient (wcf プロキシ)。
ここで、これらのレイヤー間で共有できる静的 IoC コンテナーが必要です。ビューをテスト可能にしたいのですが、そのためには、さまざまな依存関係をさまざまなレイヤーに注入し、それらの依存関係もモックアウトする必要があります。今私が直面している問題は、ninject モジュールを宣言してロードする場所です。
また、NinjectのSilverlightバージョンには、モジュールを動的にロードするために使用できる文字列引数を取るLoadのバージョンがないことに気付きました Load("*.dll")。Silverlight で動的読み込みを実現するにはどうすればよいですか
ありがとう
asp.net-mvc - モデルごとにインターフェースを作成する必要がありますか?
Ninjectを使用した依存性注入(DI)を始めたばかりで、コントローラーを操作して、モデルからもう少し切り離そうとしています。
現時点では、コントローラーの内部で、特定のモデルのインスタンスを作成しています。例:
この方法でインスタンス化したモデルごとに、これらのインターフェイスを抽出してから、DIを使用してこれらを結び付ける必要がありますか?
私が現在これを行っている例は、ActivitiesController内にあります。
そしてこれは私のglobal.asaxで一緒に結び付けられています:
これはこれを行うための正しい方法ですか?コントローラ内でインスタンス化されるモデルごとに新しいインターフェイスを作成する必要がありますか?
助けを応援し、正しい方向に微調整します:-)
asp.net-mvc-2 - 基本クラスに依存関係を注入する
私は依存性注入から始めていますが、基本クラスに依存性を注入するのに問題があります。
BaseController
他のコントローラーが継承するコントローラーがあります。この基本コントローラー内で、ユーザーが現在のページを表示するための適切な権限を持っているかどうかの判断、いくつかのセッション変数の存在の確認など、いくつかのチェックを行います。
この基本コントローラー内に Ninject を使用して注入したい依存関係がありますが、他の依存関係と同じようにこれを設定すると、コンパイラーから次のように通知されます。
エラー 1 'MyProject.Controllers.BaseController' には、0 引数を取るコンストラクターが含まれていません
これは理にかなっていますが、この依存関係を注入する方法がわかりません。ベースコントローラーを使用するこのパターンを使用する必要がありますか、それともより効率的/正しい方法でこれを行う必要がありますか?
unit-testing - 依存関係を持つオブジェクトのデータコンテキストをモックする
私は自分のプロジェクトでいくつかの単体テストを書いていますが、テストしたいメソッドを含むコントローラーにデータコンテキストの依存関係があります。
Ninjectを使用して依存関係を注入し、Moqを使用してモックデータコンテキストを作成しています。私のDIは、IDataContext
私のdbmlが意味するインターフェースを利用し、インジェクションプロセス全体で使用されます。
私の単体テストでは、次のようにモックデータコンテキストを作成しています。
これによりObject reference not set to an instance of an object.
、datacontextsコンストラクターの実行中に2行目に例外がスローされます。
これを設定する際の基本的な部分が明らかに欠けていますが、私が見たMoqの例のほとんどは、を使用したモックオブジェクトに対するある種のテストを含んでいますSetup()
。
私はこれを正しい方法で行っていますか?インターフェイスのモックなどを作成する必要がありIDataContext
ますか?