c#-将IOC容器用作MVC5的依赖项解析器会抛出“无法创建接口实例”错误
作者:互联网
我试图简单地使用IOC容器(目前为ninject)作为MVC5的依赖项解析器.
以前在MVC4,Visual Studio 2012中可以正常工作,但是现在使用VS2013和MVC5,我只是无法让解析器在我的控制器中注入依赖项.这不是ninject特有的,我也尝试过SimpleInjector和Unity -同样的错误
我只希望能够将此类插入我的家庭控制器中.
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>();
}
}
这是global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
DependencyResolver.SetResolver(new NinjectDependencyResolver());
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
这是我的HomeController
public class HomeController : Controller
{
public ActionResult Index(ITest test)
{
return View();
}
}
但是当我运行这个我不断
Server Error in '/' Application.
Cannot create an instance of an interface.
我也尝试过创建一个全新的项目(MVC 5)-同样的错误
我尝试过MVC5,然后又升级到5.2.2.同样的错误
任何帮助,不胜感激.我认为,即使我在其中设置了断点,也永远不会由于某些原因调用解析器
kernel.Bind<ITest>().To<Test>();
它确实停在那里….不知道发生了什么事:(
解决方法:
通常,您不能将参数注入到操作方法中.
您需要将依赖项注入到constroller的构造函数中:
public class HomeController : Controller
{
private readonly ITest test;
public HomeController(ITest test)
{
this.test = this;
}
public ActionResult Index()
{
//use test here
return View();
}
}
标签:ninject,c,asp-net-mvc 来源: https://codeday.me/bug/20191121/2049339.html