使用Ninject将MVC 4应用程序部署到Azure时出错

时间:2012-07-13 12:22:21

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

我使用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应正确填写此参数。

有人知道这里可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。我想说在我们的案例中,我们必须确保我们使用Windows 2008 R2作为我们的MVC应用而不是Windows 2008 SP1。您可以将配置文件更新为OS="2",或者只需登录管理面板,选择您的Web角色并单击升级操作系统。不能确定这是否是你的问题,但它适用于MVC 3网站。