2

我试图了解 Html Helpers 是如何在 MVC 3 中构建的。所以我下载了 MVC 3 源代码并将其作为另一个项目添加到同一解决方案中以对其进行调试。

我遵循了这个步骤。

  1. 从我的 MVC 应用程序中删除了 System.web.Mvc 引用

  2. 添加了用于调试的 System.web.Mvc 源代码项目参考。

  3. 在 Web.config System.Web.Mvc 中,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35 到 System.Web.Mvc

但是,我在我的 3 应用程序中添加了其他NInject( NInject, NInject.web.common, WebActivator, Microsoft.web.infrastructure) 引用以MVC进行依赖注入。

现在我在源代码中出现错误,在下面源代码中System.Web.MVCAn error occurred when trying to create a controller of type 'MVCApp.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.MVC

public IController Create(RequestContext requestContext, Type controllerType) 
{
    try
    {
        return (IController)(_resolverThunk().GetService(controllerType)
            ?? Activator.CreateInstance(controllerType));
    }
    catch (Exception ex) 
    {
        throw new InvalidOperationException(
            String.Format(CultureInfo.CurrentCulture,
                MvcResources.DefaultControllerFactory_ErrorCreatingController, controllerType),
                ex);
    }
}

检查DependencyResolver.Current属性显示 DependencyResolver.Current 类型“System.Web.Mvc.DependencyResolver”存在于“System.Web.Mvc.dll”和“System.Web.Mvc.dll”中

为了使用 MVC3 源代码调试我的 MVC3App,还需要做些什么?我怎样才能避免这个错误?

4

1 回答 1

1

看看这个解决方案:Ninject + MVC3 is not injection into controller

将此添加到 Web.config

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0" newVersion="4.0.0.0" />
    <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0" />
    <!-- The following line was missing -->
    <bindingRedirect oldVersion="3.0.0.0" newVersion="4.0.0.0" /> 
  </dependentAssembly>

它解决了这个问题:

检查 DependencyResolver.Current 属性显示 DependencyResolver.Current 类型“System.Web.Mvc.DependencyResolver”存在于“System.Web.Mvc.dll”和“System.Web.Mvc.dll”中

干杯。

于 2014-01-29T13:56:58.567 回答