MVC 3 では、私が使用していた Dependency Resolver が追加されました。誰かがコメントした質問に答えるときは、Ninject MVC 3 プラグインを使用する必要があります。
だから私の質問は、なぜそれを組み込みのものよりも使用するのですか? それが行く方法である場合、どのようにセットアップしますか?
上記は私が答えた質問へのリンクです。
MVC 3 では、私が使用していた Dependency Resolver が追加されました。誰かがコメントした質問に答えるときは、Ninject MVC 3 プラグインを使用する必要があります。
だから私の質問は、なぜそれを組み込みのものよりも使用するのですか? それが行く方法である場合、どのようにセットアップしますか?
上記は私が答えた質問へのリンクです。
ASP.NET MVC 3は、実装することを選択した依存性リゾルバーにフックする依存性注入サービスを提供します。Ninject MVC 3プラグインは、 System.Web.Mvc.IDependencyResolverで定義された型解決メソッドを実装し、適切なNinjectメソッドを呼び出して要求された型を返すだけなので、その機能は非常にシンプルです。
独自のIDependencyResolverを使用してそれをNinject(または他の依存性注入フレームワーク)にマップすることを選択するか、無料で利用できるNinject MVC 3プラグインを使用することを選択するかは、ほとんどの場合些細な違いです。
これは、手巻きのNinject互換のIDependencyResolverがどのように見えるかの完全に機能する例です。Ninject MVC 3プラグインは、基本的に非常によく似ています。
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver(IKernel kernel) {
_kernel = kernel;
}
public object GetService(Type serviceType) {
return _kernel.TryGet(serviceType, new IParameter[0]);
}
public IEnumerable<object> GetServices(Type serviceType) {
return _kernel.GetAll(serviceType, new IParameter[0]);
}
}
ここで重要な点は、ASP.NETMVCが本格的な依存性注入フレームワークを提供していないことです。ASP.NET MVC要求パイプライン全体の特定のポイント(コントローラーの解像度、ビューの解像度など)でIoCコンテナー(つまりNinject)を介して必要なタイプのインスタンスを取得するために必要なレイヤーのみを提供します。
注:使用した用語のいずれかが正確でない場合は、お知らせください。
Ninject.Web.MVC 拡張機能 (または Ninject.MVC3 NuGet パッケージ) も内部で依存関係リゾルバーを使用します。したがって、基本的には同じメカニズムを使用しています。ただし、独自の依存関係リゾルバーを実装するのではなく、拡張機能を使用する理由がいくつかあります。