【问题标题】:Error when deploying MVC 4 app with Ninject to Azure使用 Ninject 将 MVC 4 应用程序部署到 Azure 时出错
【发布时间】:2012-07-13 12:22:20
【问题描述】:

我使用 Visual Studio 2012 RC 编写了一个 MVC 4 应用程序。它使用 Ninject 作为依赖注入器,并且在我的本地机器上使用 Azure Emulator 可以正常工作。该应用程序面向 .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,因为我需要那里的数据库存储库,它作为构造函数参数传递。 Ninject应该正确填写这个参数。

有人知道这里可能存在什么问题吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不幸的是,这没有帮助。还是一样的例外。但是感谢您的尝试!
    • 好的 - 您/您是否可以远程访问您的 webrole 实例并检查以确保所有相关的 ninject 程序集都已正确部署?
    • 我通过远程桌面连接并检查了 bin 文件夹中的 DLL。我觉得没问题。有 Ninject.dll 和许多其他程序集。还有什么会导致云和本地环境中的不同行为?
    • 本地测试时,您使用的是计算模拟器还是普通的 IIS Express/VS Web 服务器?
    • 我正在使用 Azure 计算模拟器。它在 localhost:81 启动应用程序,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多