当前位置:  开发笔记 > 编程语言 > 正文

自定义控制器工厂,ASP.NET MVC的依赖注入/结构图问题

如何解决《自定义控制器工厂,ASP.NETMVC的依赖注入/结构图问题》经验,为你挑选了1个好方法。

我最近尝试使用StructureMap实现依赖注入.我设法一直遵循示例,但每次尝试运行应用程序时都会遇到抛出的异常.这是我的控制器工厂的一些代码片段.

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType == null)
            throw new ArgumentNullException("controllerType");

        return ObjectFactory.GetInstance(controllerType) as Controller;
    }
}

我的Global.asax调用一个静态的BootStrapper类来注册我的所有依赖项,但它看起来像StructureMapControllerFactory的GetControllerInstance被调用两次.第一次调用时,会传入一个正确的controllerType,但在第二次调用时它始终为null.

第一次调用GetControllerInstance时,类型设置为HomeController,这是正确的.在HomeController中触发的代码,它返回View().在返回View()时,在aspx文件上调用Page_Load事件.单步执行后,它会到达一条线:

httpHandler.ProcessRequest(HttpContext.Current);

这就是第二次调用GetControllerInstance的地方.

这是我的Global.asax位可能是相关的:

   protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);

        Bootstrapper.ConfigureStructureMap();

        ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
    }

我非常渴望让依赖注入工作,如果有人能帮助我,我会非常感激.:)



1> Micah..:

更新 发生这种情况的原因是,当在css文件中指定图像并且该图像丢失时,路由框架会尝试将URL映射到控制器.忽略下面列出的路由可以防止错误发生,但我决定不实现它,因为这是一个通知您缺少资源的好方法.

您可以在此处查看详细说明以及使用Structure Map设置依赖项注入的示例.

我遇到了同样的问题,我想我已经明白了.无论出于何种原因,每当您尝试提供自己的控制器工厂时,都需要添加一些额外的IgnoreRoute定义.我要做的第一件事是将此行添加到GetControllerInstance方法:

if(controllerType == null)
    return base.GetControllerInstance(controllerType)

这至少会在错误消息中为您提供有关导致controllerType为null的请求的更多信息.在我的特定情况下,我在我的css文件集中有一个背景图像,如下所示:

background: url(img/logo.gif);

那么接下来发生的是路由器正在寻找一个名为"img"的控制器以及一个沿着这些线路采用logo.gif或其他东西的动作.这显然不是正确的行为.

经过一番挖掘后,我意识到我需要在我的Global.asax文件中添加一个IgnoreRoute定义,该文件会忽略我网站"content"目录中的任何内容,如下所示:

routes.IgnoreRoute("{Content}/{*pathInfo}");

我仍然不确定为什么你不需要使用默认的ControllerFactory来做这个,但它仍然有效.

您可能会遇到与favicon.ico相同的问题.特别是如果你使用谷歌crhome.你还需要添加它:

routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"})

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有