我正在给ASP.NET MVC 3预览1一个旋转,并希望用它配置ninject。仍然是使用ninject.web.mvc extension的最佳方式吗?样本Scott Gu posts没有运行。它抛出“激活IControllerFactory错误”异常。
答案 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块视为执行流程的正常部分。