【问题标题】:Ninject error: he IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' did not return a controller for the name 'Products'Ninject 错误:他 IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' 没有返回名称为 'Products' 的控制器
【发布时间】:2013-07-13 04:52:43
【问题描述】:

我收到以下黄屏死机“IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' 没有返回名称为 'Products' 的控制器。”为什么?这是我的设置

更新 此配置适用于我的计算机,但不适用于我同事的计算机,即使我们的计算机具有相同的代码和配置。

代码

    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' 的控制器。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:

System.InvalidOperationException:IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' 没有返回名称为 'Products' 的控制器。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[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

【问题讨论】:

  • 你有一个名为ProductsController的类吗?
  • 是的。里面有很多代码,所以我没有发布它。

标签: asp.net-mvc asp.net-mvc-2 ninject


【解决方案1】:

更新到最新的Ninject.Web.Mvc 并删除此行:

RegisterAllControllersIn(Assembly.GetExecutingAssembly());

不再需要注册。

【讨论】:

  • 我已经更新了程序集并删除了您所说的方法,但问题仍然存在。 :(
  • 所以它可以在一台机器上工作,但不能在你的机器上,具有相同的配置...你有任何未签入的未决更改吗?
  • 在生产中没问题,但在开发机器上我有同样的问题。该死的。
【解决方案2】:

试试这个:

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

并确保您调用了正确的操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2017-06-15
    相关资源
    最近更新 更多