我有一个MVC3应用程序,我想移植到MVC4。我正在使用Ninject进行依赖注入。使用Nuget,我在项目中添加了“Ninject”并创建了一个控制器工厂,如下所示
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
//Add ninject bindings here
}
}
这适用于MVC3,但MVC4中的情况发生了变化。我做了一些挖掘,发现这个链接解释了如何让ninject为MVC4工作
http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx
但是,我无法在上面的链接中获取代码进行编译。具体来说,我应该放在web.common文件的Start()方法中的代码给我未解决的命名空间错误
GlobalConfiguration.Configuration.ServiceResolver
.SetResolver(DependencyResolver.Current.ToServiceResolver());
“ServiceResolver”和“.SetResolver”都未解析。我需要添加哪些参考才能启用这些参考?另外,如果可能的话,你可以指点我一个教程,向我展示如何让ninject在MVC4中工作,而无需安装nuget包ninject.mvc3吗?我问,因为我不希望在我的应用程序中安装任何专门为MVC3编写的软件包,以避免在更新这些nuget软件包时破坏行。
编辑:我应该补充说我使用的是Visual Studio 2012和.Net 4.5
答案 0 :(得分:14)
菲尔的文章是关于将Ninject与WebAPI一起使用。你是这个意思吗?对于正常的MVC注入,您不需要这样做。此外,你应该使用Ninject.MVC3 NuGet包与MVC4(是的,我知道它说MVC3,但它仍然可以正常工作,因为NuGet设置汇编版本重定向,使一切正常工作),这设置一切,你不要需要一个控制器工厂。只需编辑NinjectWebCommon.cs
文件即可添加绑定。
答案 1 :(得分:0)
只需简单地添加命名空间
Using Ninject;
从Nuget安装模板后你只需要从Nuget Template
安装“Ninject”而不是“Ninject for MVC3”