C# 使用IOC容器作为MVC5抛出的依赖项解析器';无法创建接口的实例';错误
我试图简单地使用IOC容器(目前为ninject)作为MVC5的依赖项解析程序。 这在MVC4、visual studio 2012中曾经运行良好,但现在使用VS2013和MVC5,我无法让解析器在我的控制器中注入依赖项。这不是ninject特有的,我也尝试过SimpleInjector和Unity-同样的错误 我只是希望能够将这个类注入到我的主控制器中C# 使用IOC容器作为MVC5抛出的依赖项解析器';无法创建接口的实例';错误,c#,asp.net-mvc,ninject,C#,Asp.net Mvc,Ninject,我试图简单地使用IOC容器(目前为ninject)作为MVC5的依赖项解析程序。 这在MVC4、visual studio 2012中曾经运行良好,但现在使用VS2013和MVC5,我无法让解析器在我的控制器中注入依赖项。这不是ninject特有的,我也尝试过SimpleInjector和Unity-同样的错误 我只是希望能够将这个类注入到我的主控制器中 public interface ITest { void dummyMethod(); }
public interface ITest
{
void dummyMethod();
}
public class Test : ITest
{
public void dummyMethod()
{
};
}
这是依赖项解析程序
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver()
{
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
private void AddBindings()
{
kernel.Bind<ITest>().To<Test>();
}
}
这是我的家庭控制器
public class HomeController : Controller
{
public ActionResult Index(ITest test)
{
return View();
}
}
但当我运行这个程序时,我总是
Server Error in '/' Application.
Cannot create an instance of an interface.
我也尝试过创建一个全新的项目(MVC5)——同样的错误
我尝试了MVC5,然后也升级到了5.2.2。同样的错误
非常感谢您的帮助。我认为,由于某种原因,永远不会调用解析器,即使我在
kernel.Bind<ITest>().To<Test>();
kernel.Bind().To();
它就停在那里。。。。不知道发生了什么:(通常,您不能将参数注入到操作方法中 您需要将依赖项注入到Consoller的构造函数中:
public class HomeController : Controller
{
private readonly ITest test;
public HomeController(ITest test)
{
this.test = this;
}
public ActionResult Index()
{
//use test here
return View();
}
}
无法向操作注入参数。您需要在构造函数中注入依赖项:
公共类HomeController:Controller{private ITest;public HomeController(ITest test){this.test=test:}public ActionResult Index(){//You test here return View();}}
噢,我的香裤子!!!!我不敢相信我错过了……愿比尔·盖茨的精神保佑你,先生!谢谢:)就是这样!“正常”是什么意思?我正在学习依赖项注入,我读到可以有构造函数注入和setter注入。@starsplusplus“正常”是关于ASP.NET MVC部分的,因为在那里你可以实现自定义iactionvoker
,在那里你也可以实现动作参数的注入。但是,默认实现当然不支持它。所以你是对的,大多数依赖注入容器只支持构造函数和setter注入。我可以在控制器之外的其他地方使用依赖注入,例如我自己的类的构造函数吗?如果你能帮我做这件事,我将不胜感激。
public class HomeController : Controller
{
private readonly ITest test;
public HomeController(ITest test)
{
this.test = this;
}
public ActionResult Index()
{
//use test here
return View();
}
}