【问题标题】:Can't seem to override CreateController in the DefaultControllerFactory似乎无法覆盖 DefaultControllerFactory 中的 CreateController
【发布时间】:2011-05-24 14:35:23
【问题描述】:

我正在尝试使用这个很棒的教程将 Elmah 实现到我的 MVC 应用程序中。

http://dotnetdarren.wordpress.com/2010/07/27/logging-on-mvc-part-1/

一切看起来都很好,但是当我构建时,我得到了

找不到合适的方法来覆盖

以下是我直接从示例中学习的课程

public class ErrorHandlingControllerFactory : DefaultControllerFactory
    {
        /// <summary>
        /// Injects a custom attribute 
        /// on every action that is invoked by the controller
        /// </summary>
        /// <param name="requestContext">The request context</param>
        /// <param name="controllerName">The name of the controller</param>
        /// <returns>An instance of a controller</returns>
        public override IController CreateController(
            RequestContext requestContext,
            string controllerName)
        {
            var controller =
                base.CreateController(requestContext,
                controllerName);

            var c = controller as Controller;

            if (c != null)
            {
                c.ActionInvoker =
                    new ErrorHandlingActionInvoker(
                        new HandleErrorWithELMAHAttribute());
            }

            return controller;
        }
    }

【问题讨论】:

  • 当我将它移动到我的解决方案中的默认 MVC 项目时,它似乎可以工作

标签: asp.net-mvc-2 logging elmah


【解决方案1】:

好吧,经过更多研究,我从这个链接中找到了问题

http://forums.asp.net/t/1622810.aspx

需要添加对 System.Web.Routing 的引用,因为它位于单独的项目中。

【讨论】:

    【解决方案2】:

    我能够成功构建:

    1. 创建了一个新的 Empty ASP.NET MVC 2 项目
    2. 从教程中复制到 HandleErrorWithELMAHAttribute 类的代码中。
    3. 复制了ErrorHandlingActionInvoker 类的代码。
    4. 复制了ErrorHandlingControllerFactory 类的代码。
    5. 添加了必要的 using 语句和对 ELMAH 的引用。

    然后,为了检查,我将ErrorHandlingControllerFactory 的原始代码替换为您问题中的代码,并且编译也没有错误。

    我能够得到这个错误是通过添加一个名为DefaultControllerFactory 的类,以便ErrorHandlingControllerFactory 将继承自该类。这似乎不太可能,但您可能需要确保从正确的类继承。

    【讨论】:

    • 谢谢漂流。似乎继承正确。 Intellisense 说我的 DefaultControllerFactory 是 System.Web.MVC 之一。我也仔细检查了我的 System.Web.MVC 版本,似乎还可以(MVC 2)我正在做的唯一不同是将所有这些类都放在它自己的项目中,从我的理解来看这无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多