2010-12-13 70 views
1

我正試圖使用​​這個偉大的教程將Elmah實現到我的MVC應用程序中。似乎無法重寫DefaultControllerFactory中的CreateController

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; 
     } 
    } 
+0

當我將其移動到我的解決方案中的默認MVC項目似乎工作 – Wil 2010-12-13 19:26:31

回答

0

我能夠建立成功sfully:

  1. 創建一個新的空ASP.NET MVC 2項目
  2. 從教程,代碼複製爲HandleErrorWithELMAHAttribute類。
  3. 複製了ErrorHandlingActionInvoker類的代碼。
  4. 複製了ErrorHandlingControllerFactory類的代碼。
  5. 添加了必要的using聲明和對ELMAH的引用。

然後,爲了檢查,我將ErrorHandlingControllerFactory的原始代碼替換爲您的問題的代碼,並且它也編譯時沒有錯誤。

我能夠得到該錯誤是通過添加一個名爲DefaultControllerFactory的類,以便ErrorHandlingControllerFactory將從該類繼承。這看起來不太可能,但你可能想確保你從正確的類繼承。

+0

感謝adrift。似乎是正確繼承。 Intellisense說我的DefaultControllerFactory是System.Web.MVC之一。我也仔細檢查了我的System.Web.MVC版本,看起來沒問題(MVC 2)唯一不同的是我將所有這些類都放在它自己的項目中,這與我所理解的無關。 – Wil 2010-12-13 13:51:18