仅在使用 MVC 3 应用程序的特定环境中从 Ninject 获取"No controller returned error"



我目前正在使用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的首选方式。

最新更新