【发布时间】:2011-03-14 00:15:53
【问题描述】:
我正在尝试部署使用 Unity 作为 IoC 容器的 ASP.NET MVC 3 应用程序。应用程序在本地服务器上运行良好,但在部署时会引发异常:没有为此对象定义无参数构造函数。这是为控制器抛出的,该控制器应该让我的 Unity DependencyResolver 注入一些存储库。
我已经使用 NuGet 安装了 Unity,因此应该直接引用它,并且我检查了它是否被复制到 bin 文件夹中。
编辑:
这是堆栈跟踪:
[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) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67
[InvalidOperationException: An error occurred when trying to create a controller of type 'nBlog.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +196
System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49
System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841400
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +18
有人知道可能是什么问题吗?
编辑 2:
我通过在 GAC 中添加对 Mvc 库(System.Web.Mvc 等)的引用而不是直接引用解决了这个问题。
以前应用程序直接引用 Mvc 库,它们被 bin 部署到托管服务器,因为服务器安装了 .net 4.0 和 mvc 2,但由于托管服务提供商安装了 Mvc 3,我已更改为对 GAC 的引用。我想这是一些安全问题,但我对托管环境中的这个应用程序安全性很陌生,我真的很想知道到底是什么问题?资源链接也将不胜感激。
【问题讨论】:
-
看起来像 web.config 中的配置问题。还向我们展示堆栈跟踪。
标签: asp.net-mvc unity-container