これは私を怒らせています。Ninject のドキュメントを読んだ、Ninject MVC 拡張機能のドキュメントを読んだ、読んだ関連する SO の質問の数を失った、コードのどこに問題があるのか わかりません。
ASP.NET MVC 4 で webapp を構築しており、Ninject を使用してリポジトリ インターフェイスをバインドしています。ドキュメントによると、NuGetを使用してNinjectを追加すると(私はそうしました)、すべてが配線されるため、アプリケーションを継承する必要はなくNinjectHttpApplication
(私はしていません)、バインディングを追加するだけで済みますでNinjectWebCommon.RegisterServices()
、(私が持っています)。と がありIRepository<T>
ますRepository<T>
。ユーザーリポジトリには、ログインと登録のための追加のメソッドがいくつかあるため、UserRepository
を実装する別のメソッドがありますIRepository<User>
。したがって、私のバインディングは次のようになります。
kernel.Bind(typeof(IRepository<>)).To(typeof(BaseRepository<>)).InRequestScope();
kernel.Bind(typeof(IRepository<User>)).To(typeof(UserRepository)).InRequestScope();
ドキュメントといくつかの SO の質問では、NuGet を使用して Ninject を追加した場合 (私が行った場合)、コントローラー ファクトリが整理され、独自の Ninject-y コントローラー ファクトリを実装する必要がないことも言及されています (したがって、私はそうではありません)。私のコントローラーは、互換性のある一連のリポジトリBaseController
を受け入れるコンストラクターを持つから継承します。IRepository
今、私が読んだことから、コントローラーを使用しようとすると、Ninject はIRepositoriy
パラメーターを認識して提供する必要があります。そうではありません。コンストラクターに属性を配置し[Inject]
ても、無視されます-代わりにパラメーターなしのコンストラクターが呼び出されます。パラメーターなしのコンストラクターを削除すると、コンパイル エラーが発生し、コンストラクターがないことを訴えます。
私は何を逃したのですか?Ninject にリポジトリを提供させるにはどうすればよいですか?