Получение сообщения «Ошибка контроллера не возвращена» из Ninject только в определенных средах с приложением MVC 3 - PullRequest
1 голос
/ 03 августа 2011

В настоящее время я создаю приложение MVC3, используя Ninject. У меня есть два контроллера, которые вставляются в репозиторий Ninject, оба отлично работают на моей локальной машине.

Однако, когда я развертываю их на своем удаленном веб-сервере, я получаю 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;
    }
}

1 Ответ

2 голосов
/ 03 августа 2011

Попробуйте использовать Ninject.MVC3, найденный в nuget, вместо своей фабрики пользовательских контроллеров. Он использует DependencyResolver вместо ControllerFactory, который является предпочтительным способом для MVC3.

...