2012-04-16 51 views
1

我正在嘗試在單獨的程序集中創建一個區域。根據RouteDebugger,我的路線看起來是正確的,但是我得到了「路徑{0}的控制器未找到或未實施IController」錯誤。MVC3未在外部程序集中調用控制器

我確認控制器是在我的容器中註冊的,但在我指定的不同命名空間下。

路由登記:

routes.MapRoute(
     "EventCalendar", 
     "EventCalendar/{action}/{id}", 
     new { controller = "EventCalendar", action = "Index", id = UrlParameter.Optional }, 
     new[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" } 
    ); 

控制器:

namespace MyAssembly.MyName.Controllers 
{ 
    public class EventCalendarController : Controller 
    { 
     public PartialViewResult Index() 
     { 
      return new PartialViewResult 
      { 
       ViewName = "~/Views/EventCalendar/Index.cshtml", 
       ViewData = new ViewDataDictionary<object>(this.ViewData.Model) 
      }; 
     } 
    } 
} 

我指定控制器的兩個命名空間和在路徑母體命名空間。我看過的例子並不清楚哪一個是必需的。 OrchardCMS使用父命名空間。 我註冊路線是否正確?

只要控制器在我的容器中,並且名稱空間匹配,它應該解析並調用正確?主組件中的控制器正常工作。

+0

是引用的單獨程序集嗎? – AdamV 2012-04-16 19:23:56

+1

它沒有被引用。我使用StructureMap來掃描IController的實例。 – rboarman 2012-04-16 22:05:50

回答

0

你可能想要使用依賴注入來做到這一點。我正在使用類似的方法處理項目(一些控制器在分離的程序集中),我們正在使用Unity將控制器注入到MVC項目中。也許this URL可以是有幫助的

也請確保相應的DLL是在你的MVC項目的bin文件夾中,這樣的類型可以解決

+0

我正在使用DI,並且已驗證控制器在容器中。 – rboarman 2012-04-16 19:51:49

+0

是你的MVC項目的bin文件夾的獨立程序集? – pollirrata 2012-04-16 20:02:21

+0

它被複制到bin foldr的子文件夾中。從那裏,它被掃描並註冊在我的StructureMap容器​​中。 – rboarman 2012-04-16 21:23:02

0

我其實感到驚訝,如果這是它,但命名空間數組MapRoute期望的是字符串類型,而不是對象。

new string[] { "MyAssembly.MyName.Controllers", " MyAssembly.MyName" } 
+0

我已經嘗試了兩種方法。 :( – rboarman 2012-04-16 19:52:03

相關問題