如何处理IController Factory不为请求返回控制器

时间:2013-12-06 15:32:14

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

我在我的ASP.NET MVC 4应用程序中使用Ninject v.3。在我的App_Start文件中,我有以下NinjectControllerFactory,它实现了MVC的DefaultControllerFactory;这很标准。

public class NinjectControllerFactory : System.Web.Mvc.DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory(IKernel kernel)
    {
        ninjectKernel = kernel;
    }

    protected override System.Web.Mvc.IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
    {
        return (controllerType == null) ? null : (System.Web.Mvc.IController)ninjectKernel.Get(controllerType);
    }
}

然后使用以下代码设置控制器工厂:

System.Web.Mvc.ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory(kernel));

现在的问题是,如果我尝试访问不存在的控制器 ,我会收到以下错误:

IControllerFactory' [Name] .Web.App_Start.NinjectControllerFactory'没有为名称[控制器名称]返回控制器。

如果我传入一个不存在的控制器,这个错误很好并且可以预期,但是应该通过404页面更优雅地处理它。我该怎么做? Global.asax文件中有异常捕获吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

不幸的是,我找到的最佳解决方案是从Asp.net MVC 4恢复到Asp.net MVC 3,其中Ninject.Web.MVC程序集完全为您处理所有这些。

虽然对某些人来说这可能是一个不可接受的答案,但它有助于解决我的问题。