ASP.NET MVC 3 Preview为ninject配置

时间:2010-08-02 19:25:04

标签: asp.net-mvc ninject

我正在给ASP.NET MVC 3预览1一个旋转,并希望用它配置ninject。仍然是使用ninject.web.mvc extension的最佳方式吗?样本Scott Gu posts没有运行。它抛出“激活IControllerFactory错误”异常。

3 个答案:

答案 0 :(得分:6)

您不需要“ Ninject.Web.Mvc ”来配置MVC 3中的Ninject,因为我在一篇标题为"Dependency Injection in ASP.NET MVC 3 using Ninject"的帖子中发表了博客。

答案 1 :(得分:4)

我相信Scott Gu的代码应该是......

public static void RegisterServices(IKernel kernel) 
{
    kernel.Bind<IProductRepository>().To<SqlProductRepository>();
    kernel.Bind<IControllerFactory>().To<NinjectControllerFactory>();
}

在...中找到NinjectControllerFactory

using Ninject.Web.Mvc;

所以是的,你仍然需要Ninject的mvc扩展名。

也许有一种更好/更新的方法来定义MVC 3中的默认控制器工厂,但这就是我做到的。

this post所示,MvcServiceLocator可能还会出现一些奇怪的行为。

答案 2 :(得分:1)

确保当您使用IDependencyResolver中的ninject内核调用时,您正在调用

_kernel.TryGet(serviceType)

MVC框架将尝试获取不同的IControllerFactory,如果它可用,如果你调用“TryGet”,它将返回null,框架将使用默认的Controller Factory。

如果您使用的是Unity,请确保将解析包装在try / catch块中并在catch中返回null。虽然这会有点慢,因为你真的不希望将catch块视为执行流程的正常部分。