問題タブ [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.
parameters - Ninject 2.0 によるコンテキスト バインディング
Ninject 1.0 では、次のバインディング定義がありました。
そのようなバインディングを考えると、私は電話をしました:
最初の呼び出しは Target1 のインスタンスに解決され、2 番目の呼び出しは Target2 のインスタンスに解決されました。
これを Ninject 2.0 に変換するにはどうすればよいですか?
asp.net-mvc-2 - Ninject 2 で ASP.NET MVC 2 をゼロから使用する
昨夜、新しいプロジェクトで File -> New Project を実行しました。ああ、緑の野原の匂い。
私はリリースされたばかりの ASP.NET MVC 2 (つまり、プレビューもリリース候補もありません) を使用しており、MVC 拡張機能を備えた Ninject 2 (これもリリース バージョン) を使用して良いスタートを切ることができると考えていました。MVC 拡張プロジェクトをダウンロードし、VS2008Sp1 で開き、リリース モードでビルドしてから、mvc2\build\release フォルダーに移動し、Ninject.dll と Ninject.Web.Mvc.dll をそこからライブラリー フォルダーにコピーしました。プロジェクト (ソース管理でそれらを持ち歩き、いつでもどこでも適切なバージョンを使用できるようにするため)。対応する .xml ファイルを含めませんでした。インテリセンスやその他の機能を提供するだけですか? 大したことではないと私は信じています。
とにかく、私は見つけた最新のアドバイスに従いました。MVC2 プロジェクトで DLL を参照してから、Global.asax.cs の作業に取り掛かりました。まず、NinjectHttpApplication から継承させました。Application_Start() メソッドを削除し、代わりに OnApplicationStarted() をオーバーライドしました。その方法は次のとおりです。
また、VS のアドバイスに従い、CreateKernel メソッドを実装しました。
それだけです。プロジェクトへのその他の変更はありません。
上記の 2 か所で RegisterAllControllersIn() メソッドがコメント アウトされていることがわかります。私はそれを 3 つの異なる組み合わせで実行できると考えましたが、そのすべてにファンキーな副作用があります。
- 上記のように実行します。
次に、標準の「ASP.NET MVC へようこそ」ページが見事に表示されます。ただし、このページがブラウザーに正しく表示された後、VS はスローされた例外を表示します。controllerType パラメーターに NULL 値を指定して呼び出された NinjectControllerFactory.GetControllerInstance() をスローします。これは、/Home ページがレンダリングされた後に発生することに注意してください。再度呼び出される理由はわかりませんが、ブレークポイントを使用することで、HomeController に対して GetControllerInstance() が正常に呼び出されたことを既に確認しています。controllerType を null としてこの新しい呼び出しを行うのはなぜですか? 本当にわからない。この時点で F5 を押すとブラウザに戻りますが、何の不満もありません。
- CreateKernel() の RegisterAllControllersIn() メソッドのコメントを外す
これは、物事が本当にファンキーになり始めているところです。これで 404 エラーが発生します。RegisterAllControllersIn() 行で ArgumentNullException が発生することもありますが、これは非常にまれであり、再現できませんでした。
- OnApplicationStarted() の RegisterAllControllers() メソッドのコメントを外す
(そして、CreateKernel() 内のコメントにコメントを戻します)
ポイント1とまったく同じように見える動作になります。
永遠に続くことを避けるために、Ninject 2 (どちらもベータ版以外のリリース バージョン) を使用して MVC 2 プロジェクトをセットアップし、Ninject によって提供されるコントローラーを取得する方法に関する正確なステップバイステップ ガイドはありますか? もちろん、インジェクション用の実際のもの (ISession オブジェクトやリポジトリ、ロガーなど) の提供を開始しますが、これを最初に機能させると思いました。
どんな助けでも大歓迎です!
(Ninject Google グループにも投稿)
asp.net-mvc-2 - この 404 は避けられないようです。何が間違っていますか? [.NET 4 上の ASP.NET MVC 2 を使用した Ninject 2.0]
今日、かなり新しいNinject 2.0とNinject.Web.Mvc (mvc2 をターゲットとする) ソースをダウンロードし、.NET 4 (リリース構成) に対してそれらを正常にビルドしました。Ninject 2.0 を使用してアプリケーションを実行しようとすると、404 エラーが発生し続け、その理由がわかりません。
これは私のglobal.asax.csです(簡潔にするために少し短くしています):
EntryController
が存在し、単純に を実行するメソッドIndex
がありreturn View()
ます。デバッグして、への呼び出しRegisterAllControllersIn()
が実行されることを確認しました。Phil Haacks Routing デバッガーも使用しようとしましたが、それでも 404 が発生します。
この原因を見つけるにはどうすればよいですか?
asp.net - NullReferenceExceptionを与えるNinject
asp.netMVC2とNinject2を使用しています。
セットアップはとても簡単です。コントローラは、リポジトリを呼び出すサービスを呼び出します。
私のコントローラーでは、injectを使用してサービスクラスを問題なくインスタンス化します。しかし、サービスクラスはリポジトリをインスタンス化しないため、NullReferenceExceptionが発生します。
これは機能します。しかし、これはしません...
RoundServiceクラスでroundRepositoryを使用しようとすると、NullReferenceExceptionが発生します。
モジュールクラス-
global.axax.csで
asp.net-mvc - Ninject 2 + ASP.NETMVC2外部アセンブリからのバインディングタイプ
Ninject2とASP.NETMVC2を使い始めようとしています。このチュートリアルhttp://www.craftyfella.com/2010/02/creating-aspnet-mvc-2-controller.htmlに従って、作成しました。 Ninjectを使用し、最初の抽象を具体的な実装にバインドするコントローラーファクトリ。ここで、別のアセンブリ(具体的なSQLリポジトリが配置されている場所)からリポジトリタイプをロードしたいのですが、それを機能させることができません。これが私のコードです:
Global.asax.cs
コントローラーファクトリー:
「MyAssembly」にはモジュールがあります:
これで、エントリポイントのMockRepositoryオブジェクトをたたくと、正常に動作し、リポジトリを必要とするコントローラが正常に動作します。kernel.Load(System.Reflection.Assembly.Load( "MyAssembly")); また、その仕事をしてモジュールを登録しますが、リポジトリを必要とするコントローラーを呼び出すとすぐに、NinjectからActivationExceptionが発生します。
一致するバインディングは使用できず、タイプは自己バインドできません。アクティベーションパス:2)タイプAccountControllerのコンストラクターのパラメーター_repへの依存性CommunityUserRepositoryの注入1)AccountControllerの要求
誰かが私に外部アセンブリからのバインディングタイプのベストプラクティスの例を教えてもらえますか(これは本当に依存性注入の重要な側面です)?ありがとうございました!
ninject - すべてのバインディングにコンテキストベースのロジックを適用するように Ninject に指示できますか?
最近依存性注入の使用を開始し、Ninject 2 (今のところ) を IoC コンテナーとして選択しました。DI の原則を組み込むためにソリューションをリファクタリングしているときに、少し気になることがあり、それを回避する簡単な方法があるかどうか疑問に思っています。
データ層には、同じジェネリック クラス (EntityMapper) を継承する多数のデータ アクセス クラスがあります。以前は、必要に応じてこれらのクラスの新しいインスタンスを作成していましたが、実際にはすべてシングルトンに変更できました。Ninject を使用してデータ アクセス オブジェクトをインスタンス化するように ObjectDataSource をオーバーライドしたので、EntityMapper クラスの 1 つを指す ObjectDataSource を作成するときはいつでも、Ninject はデフォルトの自己バインディング戦略を使用して必要な依存関係を注入します。これらのクラスは非常に多いため、EntityMapper クラスごとに明示的なバインディングを作成する必要はなく、それらのすべてに特別な属性を設定する必要もありません。でも、EntityMapper の任意のインスタンスをシングルトン クラスにするように Ninject に指示できるようにしたいと考えています。このようなもの:
これを行う方法はありますか?
.net - Ninjects ConstructorArgumentで値nullを挿入できないのはなぜですか?
Ninjects ConstructorArgumentを使用する場合、特定のパラメーターに注入する正確な値を指定できます。この値をnullにできないのはなぜですか、またはどうすれば機能させることができますか?たぶんそれはあなたがやりたいことではないかもしれませんが、私はそれを私のユニットテストで使用したいと思います。例:
dependency-injection - Ninjectカーネルスコープ
私はNinjectを初めて使用しますが、カーネルのスコープをアプリケーションごとに1つにする必要があるのではないかと考えていました。では、カーネルをシングルトンとして扱う必要がありますか?
ありがとう。
asp.net-mvc-2 - MVC2 アプリケーションを IIS7.5 にデプロイする - Ninject はコンテンツ ファイル用のコントローラーを提供するように求められました
サイトの一部として多数の Silverlight 3 プロジェクトを使用して、Visual Studio 2008 SP1 で MVC (1.0) アプリとして開始されたアプリケーションがあります。まったく空想的なものはありません。依存性注入に Ninject を使用します (最初のバージョン 2 ベータ版、現在は MVC 拡張機能を備えたバージョン 2 がリリースされています)。
.Net 4.0、VS2010、MVC2 などのリリースに伴い、アプリケーションを最新のプラットフォームに移行することにしました。VS2010 の変換ウィザードは、1 つの例外を除いてすべてを処理したようです。mvc1 への参照が mvc2 を指すように変更されなかったため、手動で行う必要がありました。もちろん、これにより、アプリから欠落している可能性のある他のMVC2のことについて考えさせられます.File-> New Projectを実行するとそこにあるでしょう...しかし、それはこの質問の焦点ではありません。
このアプリケーションを IIS 7.5 サーバー (Win2008 R2 x64 で実行) に展開すると、アプリケーション自体が機能します。ただし、画像、スクリプト、およびその他の静的コンテンツは存在しないようです。もちろん、それらはサーバーのディスク上にありますが、クライアントの Web ブラウザーには表示されません。
私は IIS にまったく慣れていないので、サーバー上のブラウザーで Web ページを開こうとすることだけを知っていました。そしてここで、ついに敵と対峙します。画像の 1 つの URL (たとえば、http://server/Content/someimage.jpg )に直接アクセスしようとすると、ブラウザーに次のエラーが表示されます。
IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' は、'Content' という名前のコントローラーのコントローラーを返しませんでした。
あはは。Web サーバーはこのリクエストを MVC にフィードしようとしますが、MVC はデフォルトのルーティング設定でコンテンツをコントローラーと見なし、失敗します。
Content/ および Scripts/ (特に) を非コントローラーとして扱い、静的コンテンツを通過させるにはどうすればよいですか? もちろん、これは私の開発者マシンの Cassini で動作しますが、展開するとすぐにこの問題が発生します。
IoC ツールが不足しているコントローラーをベース コントローラー ファクトリに渡す必要がある Ninject MVC 2 の最新バージョンを使用していますが、これは明らかに役に立ちませんでした。コンテンツなどの無視ルートも追加しようとしましたが、これも明らかに効果がありません。適切なレベルで問題に取り組んでいるかどうかさえわかりません。
このアプリを起動するためにどこを見ればよいか知っている人はいますか? 私は Web サーバーを完全に制御できるので、Web サーバーが機能し始める限り、多かれ少なかれ好きなことを行うことができます。
ありがとう!
asp.net-mvc-2 - MVCのValidationAttributeのNinjectでプロパティインジェクションを機能させるにはどうすればよいですか?
検証を実行するためにデータベースにアクセスする必要がある場所に検証属性を設定しています。プロジェクトの他の場所と同じ方法でプロパティインジェクションを設定しようとしましたが、機能しません。どのステップが欠けていますか?
もう1つ指摘しておきたいのは、非公開プロパティを注入するようにNinjectカーネルを設定しているので、それが問題だとは思わないということです。Ninject 2、MVC 2、およびMVC2バージョンのNinject.Web.MVCを使用しています。
ありがとう!