2009-09-01 13 views
10

依存性注入にStructureMapを使用するプロジェクトがあります。プロジェクトは、MVCプロジェクトとして罰金コンパイルが、MVC2プロジェクトにすべてを移動した後、私は今、次のエラーが発生します:ここでASP.NET MVC 2プレビュー1 - StructureMapコントローラファクトリをコンパイルするときの問題

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type)': no suitable method found to override C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web

は私StructureMapControllerFactoryです:

using System; 
using System.Web.Mvc; 
using StructureMap; 

namespace Test.Web.Controllers 
{ 
    public class StructureMapControllerFactory : DefaultControllerFactory 
    { 

     protected override IController GetControllerInstance(Type controllerType)** 
     { 

      IController result = null; 
      try 
      { 
       if (controllerType == null) return base.GetControllerInstance(controllerType); 
       result = ObjectFactory.GetInstance(controllerType) as Controller; 

      } 
      catch (StructureMapException) 
      { 
       System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
       throw; 
      } 

      return result; 
     } 

    } 
} 

私は1つのポストを発見した半MVC 2 preview 1 - methods with parameters in the controller fail to load

明らかに私は1.0-2.0の進歩からの変更を見逃しているに違いないが、何が変わったのかは分かりませんが、私は問題を解決する方法について何ら洞察していません。どんな助けでも常に感謝しています。

答えて

19

このメソッドのシグネチャが変更されました。 RequestContextのの最初の引数が用意されました:

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType) 

あなたはまた、base.GetControllerInstanceにお電話を変更する必要があります:

if (controllerType == null) 
    return base.GetControllerInstance(requestContext, controllerType); 
+0

ありがとう、Craig。私はSystem.Web.MVC [2.0.0.0]名前空間を調べるときに、なぜこれがVSオブジェクトブラウザに反映されないのだろうかと思います。 –

+1

わかりませんが、コードエディタでov [spacebar]と入力すると、現在のクラスのオーバーロード可能なメソッドのリストをシグネチャで取得することができます(通常、新しいメソッドを宣言する場合は "override"をタイプします)。 –

1

私は反射でそれをトレースして、実際に関数のシグネチャがありますかわった。

保護された内部仮想IController GetControllerInstance(RequestContextのRequestContextの、タイプcontrollerType)

MVC 2のdllがここに常駐: C:\プログラムファイル\のMicrosoft ASP.NET \ ASP.NET MVC 2つの\アセンブリ\ System.Web.Mvc.dll

ありがとう、それは私の問題を解決!

8

ここで、Craig Stuntzは非常に正しいです。

はちょうどあなたのDIはあなたのMVCアプリとは別のプロジェクト内にある場合は、ほかにSystem.Web.Routingを参照することを忘れないことを確認してください。

は、何らかの理由で私のためにIDEに示すエラーはありませんでしたが、コンパイルに、私はまだGetControllerInstance「ノー適切な方法は、オーバーライドすることがわかった。」になるだろう

System.Web.Routingの欠落参照アセンブリを修正すると、すべてがうまくいきました...

+0

ありがとうございました!なぜ私はまだ知りませんが、System.Web.Routingへの参照を追加すると、これは私のために修正されました! –

+0

System.Web.Routingコメントをありがとう - 私はデバッグ時間を節約しました。 – Ben

関連する問題