Oui, cela devrait être possible. Je peux penser à un sens; il peut y avoir d'autres.
La première étape consiste à modifier la route par défaut pour inclure le nom de l'application:
routes.MapRoute("Default",
"{applicationName}/{controller}/{action}/{id})",
null, null);
Je présume que vous allez regrouper les deux « applications » dans différents espaces de noms dans un seul ensemble. Donc, vous pourriez avoir deux espaces de noms comme:
- MyApp.Blog.Controllers
- MyApp.Forum.Controllers
Ensuite, vous devez changer l'usine de façon à ce qu'il instancie le contrôleur droit. Vous pouvez le faire par le sous-typage DefaultControllerFactory et redéfinissant la méthode 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);
}
Enfin, vous devez dire MVC utiliser votre ControllerFactory. Dans Global.asax.cs:
private void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(
MyApp.MyControllerFactory());
}
Les vues de localisation peuvent être traitées de manière similaire. Dans ce cas, vous sous-tapez WebFormViewEngine.
Merci beaucoup, Tim, et Craig aussi. Cela semble être le meilleur moyen d'attendre la sortie finale et de ne pas jouer avec ces hacks, qui semblent ne pas être parfaits du tout aujourd'hui. Peut-être que je devrais utiliser à nouveau WebForms jusqu'à ASP.NET MVC est prêt à 100% :-(. –