Question

Je suis en train de créer une application ASP.NET MVC avec la dernière version bêta et je me demande s'il est possible de changer le projet par défaut. Layout of

/Views/Home/Index.aspx /Views/Home/About.aspx

à

/Blog/Views/Home/Index.aspx /Blog/Views/Home/About.aspx

/Forum/Views/Home/Index.aspx /Forum/Views/Home/About.aspx

L'objectif est de séparer les "applications". Dans un seul projet Web, Thomas Owens a déjà posé la question suivante: Dans une structure MVC, quelle structure de répertoires serait attendue par les autres développeurs?

Bien sûr, cela devrait inclure les contrôleurs également, pas seulement les vues.

Était-ce utile?

La solution

Ce n'est pas un nouveau concept. C'est ce qu'on appelle les "zones". Monorail . Ce sujet a récemment suscité beaucoup d'enthousiasme sur le forum ATL.NET. et ailleurs. Steve Sanderson a mis au point un moyen de le faire mais apparemment, il reste quelques problèmes. En réponse, l’équipe MVC va apparemment lancer un " regard en profondeur " pour une version ultérieure.

Autres conseils

Oui, cela devrait être possible. Je peux penser à un sens; il peut y en avoir d'autres.

La première étape consiste à modifier la route par défaut pour inclure le nom de votre application:

routes.MapRoute("Default",
                "{applicationName}/{controller}/{action}/{id})",
                null, null);

Je suppose que vous allez regrouper les deux "applications". dans différents espaces de noms au sein d'un même assemblage. Donc, vous pourriez avoir deux espaces de noms comme:

  • MyApp.Blog.Controllers
  • MonApp.Forum.Controllers

Ensuite, vous devez changer la fabrique de contrôleurs pour qu’elle instancie le bon contrôleur. Vous pouvez le faire en sous-typant DefaultControllerFactory et en remplaçant 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 indiquer à MVC d’utiliser votre ControllerFactory. Dans Global.asax.cs:

    private void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.SetControllerFactory(
            MyApp.MyControllerFactory());
    }

La localisation des vues peut être gérée de la même manière. Dans ce cas, vous sous-type WebFormViewEngine.

Je viens de rédiger un article de blog décrivant une approche de regroupement de contrôleurs similaire à "aires". en monorail. Cependant, il ne traite pas encore les zones imbriquées.

http://haacked.com/archive/2008 /11/04/areas-in-aspnetmvc.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top