似乎无法覆盖DefaultControllerFactory中的CreateController

时间:2010-12-13 10:57:57

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

我正在尝试使用这个很棒的教程将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;
        }
    }

2 个答案:

答案 0 :(得分:1)

嗯,经过更多的研究,我从这个链接找到了问题

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

需要添加对System.Web.Routing的引用,因为它是在一个单独的项目中。

答案 1 :(得分:0)

我能够成功构建:

  1. 创建了一个新的Empty ASP.NET MVC 2项目
  2. 从教程中复制HandleErrorWithELMAHAttribute类的代码。
  3. 复制了ErrorHandlingActionInvoker类的代码。
  4. 复制了ErrorHandlingControllerFactory类的代码。
  5. 添加了必要的using语句和对ELMAH的引用。
  6. 然后,为了检查,我用你问题中的代码替换了ErrorHandlingControllerFactory的原始代码,并且它也编译没有错误。

    我能够通过添加名为DefaultControllerFactory的类来获得该错误,以便ErrorHandlingControllerFactory继承该类。这似乎不太可能,但您可能希望确保从正确的类继承。