Ошибка Ninject: он IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' не вернул контроллер для имени 'Продукты' - PullRequest
2 голосов
/ 08 ноября 2010

Я получаю следующий желтый экран смерти: «IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' не вернул контроллер для имени« Продукты ».» Зачем? Вот мои настройки

Обновление Эта конфигурация работает на моем компьютере, но не на компьютере моего коллеги, хотя наши компьютеры имеют одинаковый код и конфигурацию.

Код

    public class MvcApplication : NinjectHttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Products", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected override void OnApplicationStarted()
        {
            RegisterRoutes(RouteTable.Routes);
            RegisterAllControllersIn(Assembly.GetExecutingAssembly());
        }

        protected override IKernel CreateKernel()
        {
            var modules = new INinjectModule[]
                        {
                            new WebModule()
                        };

            return new StandardKernel(modules);
        }
    }

public class WebModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IAuthoringRepository>()
                .ToProvider(new AuthoringProvider())
                .InSingletonScope();

            Bind<ICatalogEntity>()
                .ToProvider(new ProductProvider())
                .InSingletonScope();

            Bind<TargetData>()
                .ToProvider(new TargetDataProvider()).InSingletonScope();
        }
    }

    public class AuthoringProvider : Provider<IAuthoringRepository> {
        protected override IAuthoringRepository CreateInstance(IContext context)
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            IAuthoringRepository result = RepositoryFactory.CreateAuthoringRepository(identity);
            return result;
        }
    }

    public class TargetDataProvider : Provider<TargetData>
    {
        protected override TargetData CreateInstance(IContext context)
        {
            return new TargetData { Language = Language.En, Province = Province.ON };
        }
    }

    public class ProductProvider : Provider<Product>
    {
        protected override Product CreateInstance(IContext context)
        {
            return new Product();
        }
    }

Подробнее об ошибке IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' не возвращает контроллер для имени 'Products'. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении:

System.InvalidOperationException: IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' не вернул контроллер для имени 'Продукты'.

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местонахождении исключения может быть идентифицирована с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[InvalidOperationException: The IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' did not return a controller for the name 'Products'.]
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +365
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +160
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +80
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +45
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8837208
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

Обновление до последней Ninject.Web.Mvc и удаление этой строки:

RegisterAllControllersIn(Assembly.GetExecutingAssembly());

Регистрация больше не нужна.

0 голосов
/ 13 июля 2013

попробуйте это:

routes.MapRoute(null, "",               
    new { controller = "Products", action = "Index", }
);

и убедитесь, что у вас есть правильное действие под названием

...