Да, это должно быть возможно сделать. Я могу думать об одном пути; могут быть и другие.
Первый шаг - изменить маршрут по умолчанию, включив в него имя вашего приложения:
routes.MapRoute("Default",
"{applicationName}/{controller}/{action}/{id})",
null, null);
Я предполагаю, что вы собираетесь сгруппировать два «приложения» в разные пространства имен в пределах одной сборки. Таким образом, у вас может быть два пространства имен, таких как:
- MyApp.Blog.Controllers
- MyApp.Forum.Controllers
Затем вам нужно изменить фабрику контроллеров, чтобы она создавала правильный контроллер. Вы можете сделать это, введя подтип DefaultControllerFactory и переопределив метод GetControllerType:
protected override System.Type GetControllerType(string controllerName)
{
string applicationName;
if (RequestContext != null &&
RequestContext.RouteData.Values.TryGetValue(
"applicationName", out applicationName)) {
// return controller type using app name to
// look up namespace and controllerName argument
return ...
}
// if no match, maybe it's a different controller/route
return base.GetControllerType(controllerName);
}
Наконец, вы должны указать MVC использовать ваш ControllerFactory. В Global.asax.cs:
private void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(
MyApp.MyControllerFactory());
}
Расположение представлений может быть обработано аналогично. В этом случае вы вводите подтип WebFormViewEngine.