【问题标题】:ASP.NET MVC 2 Preview 1 - Problem compiling StructureMap Controller FactoryASP.NET MVC 2 Preview 1 - 编译 StructureMap 控制器工厂的问题
【发布时间】:2009-09-01 19:44:00
【问题描述】:

我有一个项目,我使用 StructureMap 进行依赖注入。该项目作为 MVC 项目编译良好,但在将所有内容移至 MVC2 项目后,我现在收到以下错误:

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type)': 没有找到合适的方法 覆盖 C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web

这是我的 StructureMapControllerFactory:

using System;
using System.Web.Mvc;
using StructureMap;

namespace Test.Web.Controllers
{
    public class StructureMapControllerFactory : DefaultControllerFactory
    {

        protected override IController GetControllerInstance(Type controllerType)**
        {

            IController result = null;
            try
            {
                if (controllerType == null) return base.GetControllerInstance(controllerType);
                result = ObjectFactory.GetInstance(controllerType) as Controller;

            }
            catch (StructureMapException)
            {
                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }

            return result;
        }

    }
}

我发现了一篇与此问题半相关的帖子,但它没有提供任何关于如何解决我的问题的见解:MVC 2 preview 1 - methods with parameters in the controller fail to load

显然我一定错过了 1.0-2.0 进程中的变化,但我不确定发生了什么变化。任何帮助都将不胜感激。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 structuremap


    【解决方案1】:

    此方法的签名已更改。现在有了 RequestContext 的第一个参数:

    protected override IController GetControllerInstance(
        RequestContext requestContext, 
        Type controllerType)
    

    您还需要更改对 base.GetControllerInstance 的调用:

    if (controllerType == null) 
        return base.GetControllerInstance(requestContext, controllerType);
    

    【讨论】:

    • 非常感谢克雷格。我想知道为什么这在探索 System.Web.MVC [2.0.0.0] 命名空间时没有反映在 VS 对象浏览器中。
    • 不确定,但您可以在代码编辑器中键入 ov[spacebar](即,在通常声明新方法的地方开始键入“override”)以获取当前的可重载方法列表用他们的签名上课。
    【解决方案2】:

    Craig Stuntz 在这里非常正确。

    如果您的 DI 与 MVC 应用程序位于不同的项目中,请确保不要忘记引用 System.Web.Routing。

    由于某种原因,IDE 中没有为我显示任何错误,但在编译时我仍然会得到一个 GetControllerInstance“找不到合适的方法来覆盖”。

    一旦我更正了 System.Web.Routing 缺少的引用程序集,一切都很好......

    【讨论】:

    • 谢谢!。我还不知道为什么,但是添加对 System.Web.Routing 的引用为我解决了这个问题!
    • 感谢 System.Web.Routing 评论 - 为我节省了调试时间。
    【解决方案3】:

    我用反射器跟踪它,确实改变了函数签名。

    受保护的内部虚拟 IController GetControllerInstance(RequestContext requestContext, Type controllerType)

    MVC 2 dll 位于此处: C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

    谢谢,解决了我的问题!

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2015-10-02
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多