我使用Visual Studio 2012 RC编写了一个MVC 4应用程序。它使用Ninject作为依赖注入器,它使用Azure模拟器在我的本地计算机上没有任何问题。该应用程序面向.NET 4.0。但是,当我将其作为Web角色部署到Azure时,我得到了这个例外:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +117
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +247
System.Activator.CreateInstance(Type type, Boolean nonPublic) +106
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +84
[InvalidOperationException: An error occurred when trying to create a controller of type 'Poller.WebUI.Controllers.QuestionsController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +247
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +85
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +270
System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +66
System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +19
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +161
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +405
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375
我不想将无参数构造函数添加到QuestionsController,因为我需要DB存储库,它作为构造函数参数传递。 Ninject应正确填写此参数。
有人知道这里可能出现什么问题吗?
答案 0 :(得分:0)
我也遇到了这个问题。我想说在我们的案例中,我们必须确保我们使用Windows 2008 R2作为我们的MVC应用而不是Windows 2008 SP1。您可以将配置文件更新为OS="2"
,或者只需登录管理面板,选择您的Web角色并单击升级操作系统。不能确定这是否是你的问题,但它适用于MVC 3网站。