はい、できるはずです。1 つの方法を考えることができます。他にもあるかもしれません。
最初のステップは、アプリケーション名を含むようにデフォルト ルートを変更することです。
routes.MapRoute("Default",
"{applicationName}/{controller}/{action}/{id})",
null, null);
2 つの "アプリケーション" を 1 つのアセンブリ内の異なる名前空間にグループ化しようとしていると思います。したがって、次のような 2 つの名前空間がある場合があります。
- 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 をサブタイプします。