我正在研究一个MVC项目,我正在试图弄清楚如何扩展区域内现有Controller的路由,特别是从另一个项目.
例如,我有一个控制器,其区域如下所示:
namespace MyProject.Areas.Foo.Controllers
{
[Authorize]
public class FooController : ApplicationController
{
//code
}
}
Run Code Online (Sandbox Code Playgroud)
而我想做的是,能够在一个单独的项目中定义另一个Controller,可以像这样扩展它:
namespace MyOtherProject.Areas.Foo.Custom.Controllers
{
public class FooController : ApplicationController
{
public string Bar()
{
return "Bar";
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我希望控制器几乎像我使用partial关键字一样运行(这样我就可以调用原始或新的操作中的任何操作).
主要问题
我真正想要实现的是,我有一个主要项目,包括几个区域和我的解决方案的另一个区域,包含各种客户端文件夹.我希望能够为我的主项目扩展基本控制器,并在这些客户端文件夹中添加特定于客户端的操作,以便它们可以在主项目中使用.我已经使用某些MVC视图执行此操作,但我希望我也可以使用控制器完成它.
我试过的
partial在类的两个声明中使用关键字,但由于它们在不同的项目/程序集中,我认为这不起作用.bin主MVC项目的目录中,但似乎没有按预期工作.ControllerFactory但我不确定如何实现它.路由示例(AreaRegistration)
context.MapRoute(
AreaName,
String.Format("{0}/{{action}}/{{id}}", AreaName),
new { controller = AreaName, action = "Index", id = UrlParameter.Optional },
new[] {
String.Format("MyProject.Areas.{0}.Controllers", AreaName),
String.Format("MyOtherProject.Areas.{0}.Custom.Controllers", AreaName)
}
);
Run Code Online (Sandbox Code Playgroud)
更新
我尝试了一种在这里看到的方法,根据一些评论讨论,只需通过继承处理这个: …