我试图简单地使用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>();
它确实就此止步......不知道发生了什么:(
答案 0 :(得分:3)
通常,您无法将参数注入操作方法。
您需要在constroller的构造函数中注入依赖项:
public class HomeController : Controller
{
private readonly ITest test;
public HomeController(ITest test)
{
this.test = this;
}
public ActionResult Index()
{
//use test here
return View();
}
}