gpt4 book ai didi

asp.net-mvc - 为什么我的 Unity DependencyResolver 不能在共享托管上工作,但可以在本地工作?

转载 作者:行者123 更新时间:2023-12-02 01:33:33 45 4
gpt4 key购买 nike

我正在尝试部署使用 Unity 作为 IoC 容器的 ASP.NET MVC 3 应用程序。应用程序在本地服务器上运行良好,但在部署时会抛出异常:没有为此对象定义无参数构造函数。这是针对应该获取由我的 Unity DependencyResolver 注入(inject)的一些存储库的 Controller 抛出的。

我已经使用 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 库,并将它们部署到托管服务器,因为服务器安装了 .net 4.0 和 mvc 2,但由于托管提供商安装了​​ Mvc 3,我已更改为对 GAC 的引用。我想这是一些安全问题,但我对托管环境中的应用程序安全性很陌生,我真的很想知道问题到底是什么?资源链接也将不胜感激。

最佳答案

如果 Unity 在内部使用反射来构造类和依赖项,那么您将对在完全信任中运行的应用程序产生隐式依赖。

许多共享托管提供商仅允许中等信任,因此可能会阻止 Unity 在运行时反射(reflect)您的代码。您也许可以请求您的应用程序在完全信任状态下运行,但这取决于您的托管提供商。

一些类似的经历from Rick Strahl's blog here

[编辑]尝试通过编辑 web.config 文件进行本地测试:

<location allowOverride="false">
<system.web>
<!-- level="[Full|High|Medium|Low|Minimal]" -->
<trust level="Medium" originUrl=""/>
</system.web>
</location>

关于asp.net-mvc - 为什么我的 Unity DependencyResolver 不能在共享托管上工作,但可以在本地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278143/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com