2011-03-11 27 views
4

我想部署ASP.NET MVC 3應用程序,這使用Unity作爲IoC容器。應用程序在本地服務器上工作正常,但部署時會引發異常:沒有爲此對象定義無參數構造函數。這引發了一個控制器,應該得到一些由我的Unity DependencyResolver注入的庫。爲什麼我的Unity DependencyResolver不能在共享主機上工作,但在本地工作?

我已經安裝Unity與NuGet,所以它應該直接引用,我已經檢查它被複制到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的引用。我想這是一些安全問題,但我在託管環境中對這種應用程序安全性很陌生,我真的很想知道問題到底是什麼?資源鏈接也將不勝感激。

+0

看起來像在web.config中的配置問題。同時向我們顯示堆棧跟蹤。 – 2011-03-11 20:58:06

回答

0

如果Unity在內部使用Reflection來構造類和依賴項,那麼您將對正在運行的應用程序有一個隱式依賴關係Full Trust

許多共享託管服務提供商最多隻允許中等信任,所以可能會阻止Unity在運行時反映您的代碼。您可能會要求您的應用程序以完全信任方式運行,但這取決於您的託管提供商。

一些類似的經歷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> 
+0

你是否知道這個相同的問題是否出現在實體框架中? (是的,我知道這與問題無關。:-)) – mwgriffith 2011-03-11 21:23:16

+0

@mwgriffith - 檢查這個問題http://stackoverflow.com/questions/766540/does-entity-framework-linq-to-sql- data-binding-use-reflection – 2011-03-11 21:28:18

+0

如何測試它是否可以在中等信任的本地工作? – frennky 2011-03-11 22:29:00

相關問題