2012-04-16 50 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

相关问题