ASP.NET MVC 2预览1 - 编译StructureMap控制器工厂的问题

时间:2009-09-01 19:44:00

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

我有一个项目,我使用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级别的变化,但我不确定是什么改变了。任何帮助总是受到赞赏。

3 个答案:

答案 0 :(得分:19)

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

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType)

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

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

答案 1 :(得分:8)

Craig Stuntz在这里非常正确。

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

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

一旦我纠正了System.Web.Routing缺失的引用程序集,一切都很顺利......

答案 2 :(得分:1)

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

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

MVC 2 dll驻留在这里: C:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

谢谢,它解决了我的问题!