结构图控制器工厂和MVC中的空控制器实例

10 structuremap model-view-controller null controller

我还在尝试使用StructureMap来解决问题,而我遇到的一个问题是我的Controller Factory类在传递空控制器类型时会爆炸.这仅在应用程序第一次构建时发生,之后每个后续构建都可以正常工作.即使我关闭Visual Studio并重新打开项目(我没有在IIS中运行它).这几乎就像有某种缓存一样.这是控制器类的样子:

public class IocControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        try
        {
            return (Controller)ObjectFactory.GetInstance(controllerType);
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?我是否需要注册每个控制器?谢谢.

Joe*_*eau 8

当您加载网站时,大多数浏览器都在寻找favicon.ico,并且可能有一些缓存涉及此行为,这可能解释了您提到的奇怪的"仅在第一次构建时失败".

在我的情况下,这导致控制器工厂中的空控制器类型的问题.

添加一个routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });global.asax会使错误消失,请求应该落到文件系统中,而MVC不会在代码中查找favico.ico控制器.

这是关于Gunnar Peipman帖子的链接

我通过在我的自定义控制器工厂类中重写GetControllerType(字符串controllerName)并检查每个请求的controllerName值是什么来发现的.


Men*_*elt 5

我遇到了围绕ninject构建的控制器工厂的同样问题.

当它无法解析路由表中的路由或路由指定不存在的控制器时,MVC似乎会为controllertype传递null.我做了两件事来解决这个问题.您可能需要检查路由表并添加一条显示404错误页面的捕获路由,如此处所述.Net MVC路由导致Catchall无法正常工作

您还可以检查路由调试器出了什么问题. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

  • 扩展现有控制器工厂时的另一个解决方案:检查controllerType是否为null,如果是,请让现有工厂处理请求而不是自己处理请求. (7认同)