2010-12-13 3 views
1

私はこの偉大なチュートリアルを使用して、私のMVCアプリケーションにElmahを実装しようとしています。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

答えて

1

まあ、ずっとより多くの研究の後、私はそれが別々のプロジェクトであったためSystem.Web.Routingへの参照を追加する必要が

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

このリンクから問題を発見しました。

0

私はsucces sfully:HandleErrorWithELMAHAttributeクラスのコードにコピーされたチュートリアルから、新しい空のASP.NET MVC 2プロジェクト

  • を作成し

    1. ErrorHandlingActionInvokerクラスのコードがコピーされました。
    2. ErrorHandlingControllerFactoryクラスのコードがコピーされました。
    3. 追加必要なusingステートメントとELMAHへの言及。

    次に、ErrorHandlingControllerFactoryの元のコードを質問のコードに置き換え、エラーもなくコンパイルしました。

    がそれを継承するように、DefaultControllerFactoryという名前のクラスを追加することでエラーが発生しました。それは起こりそうもないようですが、あなたが正しいクラスから継承していることを確認したいかもしれません。

  • +0

    ありがとうございました。正しく継承されているようだ。 Intellisenseは私のDefaultControllerFactoryがSystem.Web.MVCであると言います。私はSystem.Web.MVCの私のバージョンをもう一度チェックしましたが、ok(MVC 2)のようです。私がやっている唯一のことは、これらすべてのクラスを自分のプロジェクトに固執することです。 – Wil

    関連する問題