我目前正在使用Ninject创建一个mvc应用程序。我有两个控制器,它们被Ninject注入了一个存储库,这两个控制器在我的本地机器上都工作得很好。
然而,当我将它们部署到我的远程web服务器时,我得到The IControllerFactory 'Inventory.Infrastructure.NinjectControllerFactory' did not return a controller for the name 'GetOptions'.
作为错误,但只有当我击中其中一个控制器时-其他工作正常。我做错了什么吗?我对Ninject和DI很陌生,所以如果有另一种方式我应该去做这个,请让我知道。谢谢!
这是我的控制器工厂
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<IVehicleRepository>().To<EFVehicleRepository>();
}
}
在Application_Start中我有:
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
最后,控制器是
public class InventoryAPIController : Controller
{
IVehicleRepository repository;
public InventoryAPIController(IVehicleRepository repo)
{
repository = repo;
}
}
和
public class VehicleController : Controller
{
IVehicleRepository repository;
public VehicleController(IVehicleRepository repo)
{
repository = repo;
}
}
尝试使用Ninject。MVC3在nuget上找到,而不是您的自定义控制器工厂。它使用DependencyResolver而不是ControllerFactory,这是MVC3的首选方式。