使用Ninject错误调试MVC3源代码

时间:2013-01-11 07:18:25

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

我试图了解如何在MVC 3中构建Html Helpers。所以我下载了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 to System.Web.Mvc

  4. 但我在我的NInject 3应用程序中添加了其他NInjectNInject.web.commonWebActivatorMicrosoft.web.infrastructureMVC)引用注射。

    现在我在System.Web.MVC来源中收到错误信息 'An 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还需要做些什么?我怎么能避免这个错误?

1 个答案:

答案 0 :(得分:1)

看一下这个解决方案:Ninject + MVC3 is not injecting 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'

干杯。