#.net #asp.net-mvc #turbine
#.net #asp.net-mvc #турбина
Вопрос:
Наш текущий проект написан на ASP.NET MVC 1 с использованием mvc-turbines (и unity) для IOC / DI.
Когда я пытаюсь запустить приложение с 2008 года, все работает нормально, но с 2010 года я продолжаю получать ошибку «Нет конструктора без параметров».
Почему? Оба нацелены на одно и то же .Net framework. Решение VS 2010 продолжает использовать фабрику контроллеров по умолчанию. Есть предложения по отладке этого?
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Booleanamp; canBeCached, RuntimeMethodHandleamp; ctor, Booleanamp; 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, IControlleramp; controller, IControllerFactoryamp; 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
Ответ №1:
Я предполагаю, что в методе Application_Start() вашего HttpApplication (Global.asax.cs) вы устанавливаете фабрику контроллеров в качестве своей пользовательской фабрики контроллеров.
Я полагаю, что происходит то, что до выполнения этой строки кода где-то в Application_Start() генерируется исключение. Если это произойдет, любой последующий вызов веб-приложения обойдет это исключение, что может привести к неправильному поведению вашего приложения (например, к неиспользованию вашей фабрики пользовательских контроллеров).
Я бы отладил Application_Start() и убедился, что он выполняется правильно. Если вы используете ELMAH, то исключение должно быть зарегистрировано.