2009-09-01 64 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; 
     } 

    } 
} 

我已經找到了一個半後有關這個問題,但它沒有提供任何有關如何解決我的問題的見解: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對象瀏覽器中沒有反映出這一點。 – 2009-09-01 20:31:37

+1

不確定,但您可以在代碼編輯器中鍵入ov [空格鍵](即開始鍵入「覆蓋」,您通常會在其中聲明新方法的位置),以獲取當前類的可重載方法列表及其簽名。 – 2009-09-01 20:39:10

1

我與反射追查,果然函數簽名是改變。 的

保護內部虛擬一個IController GetControllerInstance(RequestContext的RequestContext的,類型controllerType)

的MVC 2的dll所在的位置: C:\ Program Files文件\微軟ASP.NET \ ASP.NET MVC 2個\組件\ System.Web.Mvc.dll

謝謝,它解決了我的問題!

8

Craig Stuntz在這裏非常正確。

只要確保你不要忘記引用System.Web.Routing另外如果你的DI是在一個不同的項目比你MVC的應用程序。

由於某些原因,在IDE中沒有顯示錯誤,但在編譯時我仍然會得到一個GetControllerInstance「找不到合適的方法來覆蓋」。

一旦我糾正缺少System.Web.Routing的引用程序集,一切都很好...

+0

謝謝!我不知道爲什麼,但添加一個對System.Web.Routing的引用爲我解決了這個問題! – 2010-08-29 16:18:56

+0

感謝您的System.Web.Routing評論 - 爲我節省了時間調試。 – Ben 2010-11-24 12:38:08