MVC4 を使用して新しいプロジェクトを開始しており、依存性注入を使用したいと考えています。過去に使用したことはありませんが、今は使用するのに適しているようです。
MVC4 をサポートするようになった DI ツールと、最も簡単にセットアップできるようになった DI ツールを教えてください。プロジェクトが小さいので、私のニーズはかなり単純です。私にとって最も重要なのは、習得と構成が容易なシステムです。
MVC4 を使用して新しいプロジェクトを開始しており、依存性注入を使用したいと考えています。過去に使用したことはありませんが、今は使用するのに適しているようです。
MVC4 をサポートするようになった DI ツールと、最も簡単にセットアップできるようになった DI ツールを教えてください。プロジェクトが小さいので、私のニーズはかなり単純です。私にとって最も重要なのは、習得と構成が容易なシステムです。
MVC 4 Beta プロジェクトで Ninject.MVC3 NuGet パッケージを使用して成功しました。
// Global.asax.cs
public static void Configure(HttpConfiguration config)
{
var kernel = new StandardKernel();
RegisterServices(kernel);
// For ApiControllers
config.ServiceResolver.SetResolver(
t => kernel.TryGet(t),
t => kernel.GetAll(t));
// For Controllers
DependencyResolver.SetResolver(
t => kernel.TryGet(t),
t => kernel.GetAll(t));
}
public static void RegisterServices(IKernel kernel)
{
kernel.Bind<IRepository>().To<Repository>();
}
protected void Application_Start()
{
...
Configure(GlobalConfiguration.Configuration);
}
私はMVC4を知りません(私はまだそれで遊ぶ機会がありませんでした)が、DIコンテナーとしてNinjectをお勧めします。おそらく、Ninject MVC3プロジェクト(nugetから)をソリューションにインストールするだけで、MVC4でうまく機能する可能性があります。使用しない場合:
DependencyResolver.SetResolver(new NinjectDependencyResolver(myKernal));
ここでブログに載せられましたhttp://blogs.microsoft.co.il/blogs/gilf/archive/2010/10/17/dependency-injection-in-mvc-3-was-made-easier.aspx
ブログ投稿はユニティに適用されますが、Ninjectについてもほぼ同じです。依存関係リゾルバーを実装して、ninjectをラップし、global.ascxファイルに配置します。
何らかの理由で、NinjectDependencyResolver を使用した Ninject が MVC4 (開発者プレビュー) で機能しませんでした。
依存関係を解決するために 2 つの匿名関数を使用する SetResolver の別のオーバーロードを使用して解決しました。
IKernel kernel = new StandardKernel();
kernel.Bind<...>().To(...);
DependencyResolver.SetResolver( t => kernel.Get(t), t => kernel.GetAll(t) );