2

我们当前的项目是用 ASP.NET MVC 1 编写的,使用用于 IOC/DI 的 mvc-turbines(和统一)。

当我尝试从 2008 年启动应用程序时,一切正常,但从 2010 年开始,我不断收到“无参数构造函数”错误。

为什么?两者都针对相同的 .Net 框架。VS 2010 解决方案继续使用默认控制器工厂。有什么建议可以调试吗?

[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
   System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80

[InvalidOperationException: An error occurred when trying to create a controller of type 'CommonProject.Web.Shared.Controllers.MyController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +190
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +68
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +118
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +46
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +57
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext) +61
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +111
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +40
   System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +7
   CommonProject.Web._Default.Page_Load(Object sender, EventArgs e) in 
4

1 回答 1

1

我假设在您的 HttpApplication (Global.asax.cs) 的 Application_Start() 方法中,您将控制器工厂设置为您的自定义控制器工厂。

我相信正在发生的事情是,在执行这行代码之前,Application_Start() 中的某处引发了异常。如果发生这种情况,对 Web 应用程序的任何后续调用都将绕过此异常,这可能会导致您的应用程序行为异常(例如不使用您的自定义控制器工厂)。

我会调试 Application_Start() 并确保它正确执行。如果您使用的是ELMAH,则应记录异常。

于 2012-03-05T15:50:58.857 回答